84 lines
2.9 KiB
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(¶ms),
|
|
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)}
|
|
})
|
|
}
|