src.dualinventive.com/go/companies-service/grpc/server.go

77 lines
1.9 KiB
Go

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]
}