src.dualinventive.com/go/assets-service/cmd/assets-service-rest/handlers.go

80 lines
2.8 KiB
Go

package main
import (
"github.com/go-openapi/runtime/middleware"
"src.dualinventive.com/go/assets-service/internal/assets"
"src.dualinventive.com/go/assets-service/rest/models"
"src.dualinventive.com/go/assets-service/rest/server/operations"
h "src.dualinventive.com/go/assets-service/rest/server/operations/assets"
)
func initHandlers(
api *operations.AssetAPI,
assetService *assets.AssetService,
) {
registerGetAssetByIDHandler(api, assetService)
registerGetAssetsHandler(api, assetService)
}
func registerGetAssetByIDHandler(
api *operations.AssetAPI,
assetService *assets.AssetService,
) {
api.AssetsGetAssetByIDHandler = h.GetAssetByIDHandlerFunc(
func(params h.GetAssetByIDParams, secret interface{}) middleware.Responder {
token := secret.(string)
asset, err := assetService.GetAssetByID(token, uint64(params.AssetID))
// dupl: Preferred to keep this autonomous for future use.
if err != nil { //nolint:dupl
switch err.(type) {
case *assets.ErrUnauthorized:
return &h.GetAssetByIDUnauthorized{Payload: &models.ErrResponse{ErrMsg: err.Error()}}
case *assets.ErrAuthFailed:
return &h.GetAssetByIDInternalServerError{Payload: &models.ErrResponse{ErrMsg: err.Error()}}
case *assets.ErrAssetNotFound:
return &h.GetAssetByIDNotFound{Payload: &models.ErrResponse{ErrMsg: err.Error()}}
case *assets.ErrAssetRepositoryErr:
return &h.GetAssetByIDInternalServerError{Payload: &models.ErrResponse{ErrMsg: err.Error()}}
default:
return &h.GetAssetByIDInternalServerError{Payload: &models.ErrResponse{ErrMsg: err.Error()}}
}
}
return &h.GetAssetByIDOK{Payload: mapAsset(asset)}
})
}
func registerGetAssetsHandler(
api *operations.AssetAPI,
assetService *assets.AssetService,
) {
api.AssetsGetAssetsHandler = h.GetAssetsHandlerFunc(
func(params h.GetAssetsParams, secret interface{}) middleware.Responder {
token := secret.(string)
assetslist, count, err := assetService.GetAssets(
token,
uint64(*params.Page),
uint64(*params.PerPage),
mapSortCol(*params.Sort),
)
if err != nil { //nolint:dupl
switch err.(type) {
case *assets.ErrUnauthorized:
return &h.GetAssetsUnauthorized{Payload: &models.ErrResponse{ErrMsg: err.Error()}}
case *assets.ErrAuthFailed:
return &h.GetAssetsInternalServerError{Payload: &models.ErrResponse{ErrMsg: err.Error()}}
case *assets.ErrAssetNotFound:
return &h.GetAssetsNotFound{Payload: &models.ErrResponse{ErrMsg: err.Error()}}
case *assets.ErrAssetRepositoryErr:
return &h.GetAssetsInternalServerError{Payload: &models.ErrResponse{ErrMsg: err.Error()}}
default:
return &h.GetAssetsInternalServerError{Payload: &models.ErrResponse{ErrMsg: err.Error()}}
}
}
return &h.GetAssetsOK{Payload: mapAssets(assetslist, count)}
})
}