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)} }) }