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

79 lines
2.9 KiB
Go

package main
import (
"github.com/go-openapi/runtime/middleware"
"src.dualinventive.com/go/companies-service/internal/companies"
"src.dualinventive.com/go/companies-service/rest/models"
"src.dualinventive.com/go/companies-service/rest/server/operations"
h "src.dualinventive.com/go/companies-service/rest/server/operations/companies"
)
func initHandlers(
api *operations.CompaniesAPI,
companyService *companies.CompanyService,
) {
registerGetCompanyByIDHandler(api, companyService)
registerGetCompaniesHandler(api, companyService)
}
func registerGetCompanyByIDHandler(
api *operations.CompaniesAPI,
companyService *companies.CompanyService,
) {
api.CompaniesGetCompanyByIDHandler = h.GetCompanyByIDHandlerFunc(
func(params h.GetCompanyByIDParams, secret interface{}) middleware.Responder {
token := secret.(string)
company, err := companyService.GetCompanyByID(token, uint64(params.CompanyID))
if err != nil { //nolint:dupl
switch err.(type) {
case *companies.ErrUnauthorized:
return &h.GetCompanyByIDUnauthorized{Payload: &models.ErrResponse{ErrMsg: err.Error()}}
case *companies.ErrAuthFailed:
return &h.GetCompanyByIDInternalServerError{Payload: &models.ErrResponse{ErrMsg: err.Error()}}
case *companies.ErrCompanyNotFound:
return &h.GetCompanyByIDNotFound{Payload: &models.ErrResponse{ErrMsg: err.Error()}}
case *companies.ErrCompanyRepositoryErr:
return &h.GetCompanyByIDInternalServerError{Payload: &models.ErrResponse{ErrMsg: err.Error()}}
default:
return &h.GetCompanyByIDInternalServerError{Payload: &models.ErrResponse{ErrMsg: err.Error()}}
}
}
return &h.GetCompanyByIDOK{Payload: mapCompany(company)}
})
}
func registerGetCompaniesHandler(
api *operations.CompaniesAPI,
companyService *companies.CompanyService,
) {
api.CompaniesGetCompaniesHandler = h.GetCompaniesHandlerFunc(
func(params h.GetCompaniesParams, secret interface{}) middleware.Responder {
token := secret.(string)
companieslist, count, err := companyService.GetCompanies(
token,
uint64(*params.Page),
uint64(*params.PerPage),
mapSortCol(*params.Sort))
if err != nil { //nolint:dupl
switch err.(type) {
case *companies.ErrUnauthorized:
return &h.GetCompanyByIDUnauthorized{Payload: &models.ErrResponse{ErrMsg: err.Error()}}
case *companies.ErrAuthFailed:
return &h.GetCompanyByIDInternalServerError{Payload: &models.ErrResponse{ErrMsg: err.Error()}}
case *companies.ErrCompanyNotFound:
return &h.GetCompanyByIDNotFound{Payload: &models.ErrResponse{ErrMsg: err.Error()}}
case *companies.ErrCompanyRepositoryErr:
return &h.GetCompanyByIDInternalServerError{Payload: &models.ErrResponse{ErrMsg: err.Error()}}
default:
return &h.GetCompanyByIDInternalServerError{Payload: &models.ErrResponse{ErrMsg: err.Error()}}
}
}
return &h.GetCompaniesOK{Payload: mapCompanies(companieslist, count)}
})
}