package grpc import ( "golang.org/x/net/context" "google.golang.org/grpc/metadata" "src.dualinventive.com/go/companies-service/internal/companies" "src.dualinventive.com/go/companies-service/internal/storage" "src.dualinventive.com/go/lib/dilog" mtinfo "src.dualinventive.com/go/mtinfo-go" ) //Server is a structure of server instance type Server struct { Name string CompanyService *companies.CompanyService } //NewServer creates new instance of Server func NewServer( logger dilog.Logger, companyRepository storage.CompanyRepository, mtinfoClient *mtinfo.Client, ) (*Server, error) { server := &Server{ Name: "companies-service-grpc", CompanyService: &companies.CompanyService{ Logger: logger, CompanyRepository: companyRepository, Mtinfo: mtinfoClient, }, } return server, nil } //GetCompanyByID returns a company found by the given ID func (s *Server) GetCompanyByID(ctx context.Context, req *GetCompanyByIDRequest) (*GetCompanyByIDResponse, error) { company, err := s.CompanyService.GetCompanyByID(getValue(ctx, "token"), req.CompanyID) if err != nil { return nil, mapError(err) } return &GetCompanyByIDResponse{Company: mapCompany(company)}, nil } //GetCompanies returns a list of companies func (s *Server) GetCompanies(ctx context.Context, req *GetCompaniesRequest) (*GetCompaniesResponse, error) { companies, count, err := s.CompanyService.GetCompanies( getValue(ctx, "token"), req.Page, req.PerPage, mapSortCol(req.Sort), ) if err != nil { return nil, mapError(err) } return &GetCompaniesResponse{Companies: mapCompanies(companies), 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] }