70 lines
1.9 KiB
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
|
|
}
|