92 lines
1.9 KiB
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
|
|
}
|