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

70 lines
1.9 KiB
Go

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
}