72 lines
2.1 KiB
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
|
|
}
|