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

84 lines
2.9 KiB
Go

package main
import (
"github.com/go-openapi/runtime/middleware"
"src.dualinventive.com/go/users-service/errors"
"src.dualinventive.com/go/users-service/internal/users"
"src.dualinventive.com/go/users-service/rest/models"
"src.dualinventive.com/go/users-service/rest/server/operations"
h "src.dualinventive.com/go/users-service/rest/server/operations/users"
)
func initHandlers(
api *operations.UsersAPI,
userService *users.UserService,
) {
registerGetUserByIDHandler(api, userService)
registerListUsersHandler(api, userService)
}
func registerGetUserByIDHandler(
api *operations.UsersAPI,
userService *users.UserService,
) {
api.UsersGetUserByIDHandler = h.GetUserByIDHandlerFunc(
func(params h.GetUserByIDParams, secret interface{}) middleware.Responder {
token := secret.(string)
user, err := userService.GetUserByID(token, uint64(params.UserID))
// Suppress the linter because it is preferred to keep this autonomous for future use.
//nolint:dupl
if err != nil {
switch err.(type) {
case *errors.ErrUnauthorized:
return &h.GetUserByIDUnauthorized{Payload: &models.ErrResponse{ErrMsg: err.Error()}}
case *errors.ErrAuthFailed:
return &h.GetUserByIDInternalServerError{Payload: &models.ErrResponse{ErrMsg: err.Error()}}
case *errors.ErrUserNotFound:
return &h.GetUserByIDNotFound{Payload: &models.ErrResponse{ErrMsg: err.Error()}}
case *errors.ErrUserRepositoryErr:
return &h.GetUserByIDInternalServerError{Payload: &models.ErrResponse{ErrMsg: err.Error()}}
default:
return &h.GetUserByIDInternalServerError{Payload: &models.ErrResponse{ErrMsg: err.Error()}}
}
}
return &h.GetUserByIDOK{Payload: mapUser(user)}
})
}
func registerListUsersHandler(
api *operations.UsersAPI,
userService *users.UserService,
) {
api.UsersListUsersHandler = h.ListUsersHandlerFunc(
func(params h.ListUsersParams, secret interface{}) middleware.Responder {
token := secret.(string)
users, count, err := userService.ListUsers(
token,
mapFilter(&params),
uint64(*params.Page),
uint64(*params.PerPage),
mapSortCol(*params.Sort))
// Suppress the linter because it is preferred to keep this autonomous for future use.
//nolint:dupl
if err != nil {
switch err.(type) {
case *errors.ErrUnauthorized:
return &h.GetUsersUnauthorized{Payload: &models.ErrResponse{ErrMsg: err.Error()}}
case *errors.ErrAuthFailed:
return &h.GetUsersInternalServerError{Payload: &models.ErrResponse{ErrMsg: err.Error()}}
case *errors.ErrUserNotFound:
return &h.GetUsersNotFound{Payload: &models.ErrResponse{ErrMsg: err.Error()}}
case *errors.ErrUserRepositoryErr:
return &h.GetUsersInternalServerError{Payload: &models.ErrResponse{ErrMsg: err.Error()}}
default:
return &h.GetUsersInternalServerError{Payload: &models.ErrResponse{ErrMsg: err.Error()}}
}
}
return &h.ListUsersOK{Payload: mapUsers(users, count)}
})
}