package assets import ( "src.dualinventive.com/go/assets-service/internal/domain" "src.dualinventive.com/go/assets-service/internal/storage" "src.dualinventive.com/go/lib/dilog" mtinfo "src.dualinventive.com/go/mtinfo-go" ) //AssetService contains Asset related operations. type AssetService struct { Logger dilog.Logger AssetRepository storage.AssetRepository Mtinfo *mtinfo.Client } //GetAssetByID returns a asset by the given assetID, or returns an error. func (s *AssetService) GetAssetByID(token string, assetID uint64) (*domain.Asset, error) { ok, err := s.Mtinfo.Auth.VerifyToken(token) if err != nil { s.Logger.WithField("token", token).WithError(err).Debug("unauthorized with error") return nil, NewErrAuthFailed(err) } if !ok { s.Logger.WithField("token", token).Debug("unauthorized") return nil, NewErrUnauthorized() } asset, err := s.AssetRepository.GetAssetByID(assetID) if err != nil { return nil, NewErrAssetRepositoryErr("failed to fetch asset", err) } if asset == nil { return nil, NewErrAssetNotFound() } return asset, nil } //GetAssets returns all assets, or returns an error. func (s *AssetService) GetAssets( token string, page uint64, perPage uint64, sort domain.SortCol, ) ([]domain.Asset, uint64, error) { ok, err := s.Mtinfo.Auth.VerifyToken(token) if err != nil { return nil, 0, NewErrAuthFailed(err) } if !ok { 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") } assets, count, err := s.AssetRepository.GetAssets(page, perPage, sort) if err != nil { return nil, 0, NewErrAssetRepositoryErr("failed to fetch assets", err) } return assets, count, nil }