package grpc import ( "golang.org/x/net/context" "google.golang.org/grpc/metadata" "src.dualinventive.com/go/lib/dilog" "src.dualinventive.com/go/mtinfo-go" "src.dualinventive.com/go/users-service/internal/storage" "src.dualinventive.com/go/users-service/internal/users" ) //Server is a structure of server instance type Server struct { Name string UserService *users.UserService } //NewServer creates new instance of Server func NewServer( logger dilog.Logger, userRepository storage.UserRepository, mtinfoClient *mtinfo.Client, ) (*Server, error) { server := &Server{ Name: "authentication-service-grpc", UserService: &users.UserService{ Logger: logger, UserRepository: userRepository, Mtinfo: mtinfoClient, }, } return server, nil } //GetUserByID returns a user found by the given ID func (s *Server) GetUserByID(ctx context.Context, req *GetUserByIDRequest) (*GetUserByIDResponse, error) { user, err := s.UserService.GetUserByID(getValue(ctx, "token"), req.UserID) if err != nil { return nil, mapError(err) } return &GetUserByIDResponse{User: mapUser(user)}, nil } //ListUsers returns a list of users found by the given filter func (s *Server) ListUsers(ctx context.Context, req *ListUsersRequest) ( *ListUsersResponse, error) { users, count, err := s.UserService.ListUsers( getValue(ctx, "token"), mapFilter(req.Filter), req.Page, req.PerPage, mapSortCol(req.Sort), ) if err != nil { return nil, mapError(err) } return &ListUsersResponse{Users: mapUsers(users), Count: count}, nil } func getValue(ctx context.Context, s string) string { //nolint: unparam md, ok := metadata.FromIncomingContext(ctx) if !ok { return "" } raw := md.Get(s) if raw == nil { return "" } if len(raw) == 0 { return "" } return raw[0] }