route/server/route.go

92 lines
1.9 KiB
Go

package server
import (
proto "git.xeserv.us/xena/route/proto"
"github.com/Xe/ln"
"github.com/pkg/errors"
"golang.org/x/net/context"
)
// Route implements rout.RoutesServer for gRPC
type Route struct {
*Server
}
// interface assertions
var (
_ proto.RoutesServer = &Route{}
)
// errors
var ()
// generic error message
const (
errorMsg = "internal service error, verify your parameters and try again later"
)
// Get fetches a route from the database.
func (r *Route) Get(ctx context.Context, req *proto.GetRouteRequest) (*proto.Route, error) {
val, err := r.db.GetRoute(ctx, req.Host)
if err != nil {
ln.Error(err, ln.F{"action": "Route.Get"})
return nil, err
}
return val.AsProto(), nil
}
// GetAll fetches all of the routes that you own.
func (r *Route) GetAll(ctx context.Context, req *proto.Nil) (*proto.GetAllRoutesResponse, error) {
routes, err := r.db.GetAllRoutes()
if err != nil {
ln.Error(err, ln.F{"action": "Route.GetAll"})
return nil, err
}
result := []*proto.Route{}
// let result = apply routeAsProto routes
for _, rt := range routes {
result = append(result, rt.AsProto())
}
return &proto.GetAllRoutesResponse{
Routes: result,
}, nil
}
func (r *Route) Put(ctx context.Context, rt *proto.Route) (*proto.IDResponse, error) {
drt, err := r.db.PutRoute(ctx, rt.Host, "http")
if err != nil {
ln.Error(err, ln.F{"action": "Route.Put"})
return nil, err
}
return &proto.IDResponse{
Id: drt.ID,
}
}
func (r *Route) Delete(ctx context.Context, rt *proto.Route) (*proto.IDResponse, error) {
drt, err := r.db.GetRoute(ctx, rt.Host)
if err != nil {
ln.Error(err, ln.F{"action": "Route.Delete_getRoute_verify"})
return nil, err
}
err := r.db.DeleteRoute(ctx, rt.Id)
f := drt.F()
f["action"] = "Route.Delete_db.DeleteRoute"
if err != nil {
ln.Error(err, f)
return nil, err
}
return &proto.IDResponse{Id: rt.Id}, nil
}