package companies import ( "src.dualinventive.com/go/companies-service/internal/domain" "src.dualinventive.com/go/companies-service/internal/storage" "src.dualinventive.com/go/lib/dilog" mtinfo "src.dualinventive.com/go/mtinfo-go" ) //CompanyService contains Company related operations. type CompanyService struct { Logger dilog.Logger CompanyRepository storage.CompanyRepository Mtinfo *mtinfo.Client } //GetCompanyByID returns a company by the given companyID, or returns an error. func (s *CompanyService) GetCompanyByID(token string, companyID uint64) (*domain.Company, error) { ok, err := s.Mtinfo.Auth.VerifyToken(token) if err != nil { s.Logger.WithField("token", token).WithError(err).Warning("unauthorized with error") return nil, NewErrUnauthorized() } if !ok { s.Logger.WithField("token", token).Warning("unauthorized") return nil, NewErrUnauthorized() } company, err := s.CompanyRepository.GetCompanyByID(companyID) if err != nil { return nil, NewErrCompanyRepositoryErr("failed to fetch company", err) } if company == nil { return nil, NewErrCompanyNotFound() } return company, nil } //GetCompanies returns all companies, or returns an error. func (s *CompanyService) GetCompanies( token string, page uint64, perPage uint64, sort domain.SortCol, ) ([]domain.Company, uint64, error) { ok, err := s.Mtinfo.Auth.VerifyToken(token) if err != nil { s.Logger.WithField("token", token).WithError(err).Warning("unauthorized with error") return nil, 0, NewErrUnauthorized() } if !ok { s.Logger.WithField("token", token).Warning("unauthorized") return nil, 0, NewErrUnauthorized() } if page == 0 { return nil, 0, NewErrInvalidArgument("page", "can not be 0") } if perPage == 0 { return nil, 0, NewErrInvalidArgument("per_page", "can not be 0") } if perPage > 200 { return nil, 0, NewErrInvalidArgument("per_page", "can not be > 200") } companies, count, err := s.CompanyRepository.GetCompanies(page, perPage, sort) if err != nil { return nil, 0, NewErrCompanyRepositoryErr("failed to fetch companies", err) } return companies, count, nil }