src.dualinventive.com/go/companies-service/internal/companies/companies.go

72 lines
2.1 KiB
Go

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
}