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