Added errors for services
This commit is contained in:
parent
ab4b53fd40
commit
c3c3d65d32
12 changed files with 217 additions and 86 deletions
15
internal/application/errors/already_exists_error.go
Normal file
15
internal/application/errors/already_exists_error.go
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
package errors
|
||||
|
||||
type AlreadyExistsError struct {
|
||||
msg string
|
||||
}
|
||||
|
||||
func NewAlreadyExistsError(msg string) *AlreadyExistsError {
|
||||
return &AlreadyExistsError{
|
||||
msg: msg,
|
||||
}
|
||||
}
|
||||
|
||||
func (e *AlreadyExistsError) Error() string {
|
||||
return "Already exists: " + e.msg
|
||||
}
|
||||
|
|
@ -4,12 +4,12 @@ type DBError struct {
|
|||
msg string
|
||||
}
|
||||
|
||||
func NewDBError(msg string) DBError {
|
||||
return DBError{
|
||||
func NewDBError(msg string) *DBError {
|
||||
return &DBError{
|
||||
msg: msg,
|
||||
}
|
||||
}
|
||||
|
||||
func (e *DBError) Error() string {
|
||||
return e.msg
|
||||
return "Database error:" + e.msg
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,5 +11,5 @@ func NewNotFoundError(msg string) *NotFoundError {
|
|||
}
|
||||
|
||||
func (e *NotFoundError) Error() string {
|
||||
return e.msg
|
||||
return "Not found error: " + e.msg
|
||||
}
|
||||
|
|
|
|||
15
internal/application/errors/validation_error.go
Normal file
15
internal/application/errors/validation_error.go
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
package errors
|
||||
|
||||
type ValidationError struct {
|
||||
msg string
|
||||
}
|
||||
|
||||
func NewValidationError(msg string) *ValidationError {
|
||||
return &ValidationError{
|
||||
msg: msg,
|
||||
}
|
||||
}
|
||||
|
||||
func (e *ValidationError) Error() string {
|
||||
return "Validation error: " + e.msg
|
||||
}
|
||||
|
|
@ -3,13 +3,11 @@ package services
|
|||
import (
|
||||
"58team_blog/internal/application/commands"
|
||||
"58team_blog/internal/application/common"
|
||||
ie "58team_blog/internal/application/errors"
|
||||
"58team_blog/internal/application/errors"
|
||||
"58team_blog/internal/application/mapper"
|
||||
"58team_blog/internal/application/queries"
|
||||
"58team_blog/internal/domain/entities"
|
||||
"58team_blog/internal/domain/repository"
|
||||
"errors"
|
||||
"fmt"
|
||||
"time"
|
||||
)
|
||||
|
||||
|
|
@ -26,12 +24,12 @@ func CreatePostService(repo repository.PostRepository) PostService {
|
|||
func (s *PostService) Create(cmd commands.CreatePostCommand) (*common.PostResult, error) {
|
||||
entity, err := entities.CreatePost(cmd.UserId, cmd.Title, cmd.Description, cmd.Content)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return nil, errors.NewValidationError("Invalid input data " + err.Error())
|
||||
}
|
||||
|
||||
post, err := s.repo.Create(&entity)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("Db error: %s", err)
|
||||
return nil, errors.NewDBError(err.Error())
|
||||
}
|
||||
|
||||
result := mapper.CreatePostResultFromEntity(post)
|
||||
|
|
@ -42,15 +40,15 @@ func (s *PostService) Create(cmd commands.CreatePostCommand) (*common.PostResult
|
|||
func (s *PostService) FindById(query queries.PostFindByIdQuery) (*queries.PostFindByIdResult, error) {
|
||||
post, err := s.repo.FindById(query.Id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return nil, errors.NewDBError(err.Error())
|
||||
}
|
||||
|
||||
if post == nil {
|
||||
return nil, ie.NewNotFoundError("Post")
|
||||
return nil, errors.NewNotFoundError("Post")
|
||||
}
|
||||
|
||||
if err := post.Validate(); err != nil {
|
||||
return nil, err
|
||||
return nil, errors.NewValidationError(err.Error())
|
||||
}
|
||||
|
||||
result := mapper.CreatePostFindByIdResultFromEntity(*post)
|
||||
|
|
@ -61,12 +59,12 @@ func (s *PostService) FindById(query queries.PostFindByIdQuery) (*queries.PostFi
|
|||
func (s *PostService) FindAllByUserName(query queries.PostFindAllByUserNameQuery) (*queries.PostFindAllByUserNameResult, error) {
|
||||
posts, err := s.repo.FindAllByUserName(query.UserName)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return nil, errors.NewDBError(err.Error())
|
||||
}
|
||||
|
||||
for _, p := range posts {
|
||||
if err := p.Validate(); err != nil {
|
||||
return nil, err
|
||||
return nil, errors.NewValidationError(err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -78,12 +76,12 @@ func (s *PostService) FindAllByUserName(query queries.PostFindAllByUserNameQuery
|
|||
func (s *PostService) GetAll() (*queries.PostGetAllResult, error) {
|
||||
posts, err := s.repo.GetAll()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return nil, errors.NewDBError(err.Error())
|
||||
}
|
||||
|
||||
for _, p := range posts {
|
||||
if err := p.Validate(); err != nil {
|
||||
return nil, err
|
||||
return nil, errors.NewValidationError(err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -94,13 +92,12 @@ func (s *PostService) GetAll() (*queries.PostGetAllResult, error) {
|
|||
|
||||
func (s *PostService) GetAllOffset(offset int) (*queries.PostGetAllResult, error) {
|
||||
if offset < 0 {
|
||||
return nil, errors.New("offset is less than 0")
|
||||
return nil, errors.NewValidationError("offset is less than 0")
|
||||
}
|
||||
|
||||
posts, err := s.repo.GetAllOffset(offset)
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return nil, errors.NewDBError(err.Error())
|
||||
}
|
||||
|
||||
result := mapper.CreatePostGetAllResult(posts)
|
||||
|
|
@ -111,11 +108,11 @@ func (s *PostService) GetAllOffset(offset int) (*queries.PostGetAllResult, error
|
|||
func (s *PostService) Update(cmd commands.UpdatePostCommand) (*common.PostResult, error) {
|
||||
post, err := s.repo.FindById(cmd.Id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return nil, errors.NewDBError(err.Error())
|
||||
}
|
||||
|
||||
if err := post.Validate(); err != nil {
|
||||
return nil, err
|
||||
return nil, errors.NewValidationError(err.Error())
|
||||
}
|
||||
|
||||
post.Title = cmd.Title
|
||||
|
|
@ -124,7 +121,7 @@ func (s *PostService) Update(cmd commands.UpdatePostCommand) (*common.PostResult
|
|||
post.UpdatedAt = time.Now()
|
||||
|
||||
if err := post.Validate(); err != nil {
|
||||
return nil, err
|
||||
return nil, errors.NewValidationError(err.Error())
|
||||
}
|
||||
|
||||
result := mapper.CreatePostResultFromEntity(post)
|
||||
|
|
@ -135,16 +132,16 @@ func (s *PostService) Update(cmd commands.UpdatePostCommand) (*common.PostResult
|
|||
func (s *PostService) Delete(cmd commands.DeletePostCommand) error {
|
||||
post, err := s.repo.FindById(cmd.Id)
|
||||
if err != nil {
|
||||
return err
|
||||
return errors.NewDBError(err.Error())
|
||||
}
|
||||
|
||||
if err := post.Validate(); err != nil {
|
||||
return err
|
||||
return errors.NewValidationError(err.Error())
|
||||
}
|
||||
|
||||
err = s.repo.Delete(cmd.Id)
|
||||
if err != nil {
|
||||
return err
|
||||
return errors.NewDBError(err.Error())
|
||||
}
|
||||
|
||||
return nil
|
||||
|
|
|
|||
|
|
@ -3,12 +3,11 @@ package services
|
|||
import (
|
||||
"58team_blog/internal/application/commands"
|
||||
"58team_blog/internal/application/common"
|
||||
"58team_blog/internal/application/errors"
|
||||
"58team_blog/internal/application/mapper"
|
||||
"58team_blog/internal/application/queries"
|
||||
"58team_blog/internal/domain/entities"
|
||||
"58team_blog/internal/domain/repository"
|
||||
"errors"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
type UserService struct {
|
||||
|
|
@ -26,27 +25,23 @@ func (s *UserService) Create(cmd commands.CreateUserCommand) (*common.UserResult
|
|||
{
|
||||
user, err := s.repo.FindByName(cmd.Username)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("User.create findByName error: %s", err)
|
||||
return nil, errors.NewDBError(err.Error())
|
||||
}
|
||||
|
||||
if user != nil {
|
||||
return nil, fmt.Errorf("User: %s already exists", user.UserName)
|
||||
return nil, errors.NewAlreadyExistsError("user: " + cmd.Username)
|
||||
}
|
||||
}
|
||||
|
||||
// Create new user
|
||||
user, err := entities.CreateUser(cmd.Username, cmd.Password)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if err := user.Validate(); err != nil {
|
||||
return nil, err
|
||||
return nil, errors.NewValidationError(err.Error())
|
||||
}
|
||||
|
||||
entity, err := s.repo.Create(&user)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return nil, errors.NewDBError(err.Error())
|
||||
}
|
||||
|
||||
result := mapper.CreateUserResultFromEntity(entity)
|
||||
|
|
@ -57,11 +52,11 @@ func (s *UserService) Create(cmd commands.CreateUserCommand) (*common.UserResult
|
|||
func (s *UserService) FindById(query queries.UserFindByIdQuery) (*queries.UserFindByIdResult, error) {
|
||||
entity, err := s.repo.FindById(query.Id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return nil, errors.NewDBError(err.Error())
|
||||
}
|
||||
|
||||
if err := entity.Validate(); err != nil {
|
||||
return nil, err
|
||||
return nil, errors.NewValidationError(err.Error())
|
||||
}
|
||||
|
||||
result := mapper.CreateUserFindByIdResultFromEntity(entity)
|
||||
|
|
@ -72,11 +67,11 @@ func (s *UserService) FindById(query queries.UserFindByIdQuery) (*queries.UserFi
|
|||
func (s *UserService) FindByName(query queries.UserFindByNameQuery) (*queries.UserFindByNameResult, error) {
|
||||
entity, err := s.repo.FindByName(query.Name)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return nil, errors.NewDBError(err.Error())
|
||||
}
|
||||
|
||||
if err := entity.Validate(); err != nil {
|
||||
return nil, err
|
||||
return nil, errors.NewValidationError(err.Error())
|
||||
}
|
||||
|
||||
result := mapper.CreateUserFindByNameResultFromEntity(entity)
|
||||
|
|
@ -86,12 +81,12 @@ func (s *UserService) FindByName(query queries.UserFindByNameQuery) (*queries.Us
|
|||
func (s *UserService) GetAll() (*queries.UserGetAllResult, error) {
|
||||
entityList, err := s.repo.GetAll()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return nil, errors.NewDBError(err.Error())
|
||||
}
|
||||
|
||||
for _, e := range entityList {
|
||||
if err := e.Validate(); err != nil {
|
||||
return nil, err
|
||||
return nil, errors.NewValidationError(err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -102,25 +97,25 @@ func (s *UserService) GetAll() (*queries.UserGetAllResult, error) {
|
|||
func (s *UserService) Update(cmd commands.UpdateUserCommand) (*common.UserResult, error) {
|
||||
entity, err := s.repo.FindById(cmd.Id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return nil, errors.NewDBError(err.Error())
|
||||
}
|
||||
|
||||
if err := entity.Validate(); err != nil {
|
||||
return nil, err
|
||||
return nil, errors.NewValidationError(err.Error())
|
||||
}
|
||||
|
||||
if cmd.Username != entity.UserName {
|
||||
return nil, errors.New("You cannot change user name")
|
||||
return nil, errors.NewValidationError("You cannot change user name")
|
||||
}
|
||||
|
||||
entity.Password = cmd.Password
|
||||
|
||||
if err := entity.Validate(); err != nil {
|
||||
return nil, err
|
||||
return nil, errors.NewValidationError(err.Error())
|
||||
}
|
||||
|
||||
if err := s.repo.Update(entity); err != nil {
|
||||
return nil, err
|
||||
return nil, errors.NewDBError(err.Error())
|
||||
}
|
||||
|
||||
result := mapper.CreateUserResultFromEntity(entity)
|
||||
|
|
@ -130,15 +125,15 @@ func (s *UserService) Update(cmd commands.UpdateUserCommand) (*common.UserResult
|
|||
func (s *UserService) Delete(cmd commands.DeleteUserCommand) error {
|
||||
entity, err := s.repo.FindById(cmd.Id)
|
||||
if err != nil {
|
||||
return err
|
||||
return errors.NewDBError(err.Error())
|
||||
}
|
||||
|
||||
if err := entity.Validate(); err != nil {
|
||||
return err
|
||||
return errors.NewValidationError(err.Error())
|
||||
}
|
||||
|
||||
if err := s.repo.Delete(entity.Id); err != nil {
|
||||
return err
|
||||
return errors.NewDBError(err.Error())
|
||||
}
|
||||
|
||||
return nil
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ import (
|
|||
"58team_blog/internal/interfaces/api/mapper"
|
||||
"58team_blog/internal/interfaces/api/requests"
|
||||
"58team_blog/internal/interfaces/api/responses"
|
||||
"58team_blog/internal/utils"
|
||||
"log"
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
|
@ -42,7 +43,7 @@ func (r *PostController) Post(c *gin.Context) {
|
|||
|
||||
if err := c.BindJSON(&request); err != nil {
|
||||
log.Println(err)
|
||||
resp := responses.CreateErrorResponse(http.StatusBadRequest, "BadRequest")
|
||||
resp := responses.CreateErrorResponse(http.StatusBadRequest, err.Error())
|
||||
c.JSON(resp.ErrorCode, resp)
|
||||
return
|
||||
}
|
||||
|
|
@ -64,8 +65,7 @@ func (r *PostController) Post(c *gin.Context) {
|
|||
|
||||
res, err := r.service.Create(cmd)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
resp := responses.CreateErrorResponse(http.StatusInternalServerError, "Internal server error")
|
||||
resp := utils.HandleError(err)
|
||||
c.JSON(resp.ErrorCode, resp)
|
||||
return
|
||||
}
|
||||
|
|
@ -87,8 +87,7 @@ func (r *PostController) Post(c *gin.Context) {
|
|||
func (r *PostController) GetAll(c *gin.Context) {
|
||||
result, err := r.service.GetAll()
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
resp := responses.CreateErrorResponse(http.StatusInternalServerError, "Internal server error")
|
||||
resp := utils.HandleError(err)
|
||||
c.JSON(resp.ErrorCode, resp)
|
||||
return
|
||||
}
|
||||
|
|
@ -107,21 +106,21 @@ func (r *PostController) GetAll(c *gin.Context) {
|
|||
// @Produce json
|
||||
// @Success 200 {array} responses.GetListPostResponseItem
|
||||
// @Failure 400 {object} responses.ErrorResponse
|
||||
// @Failure 500 {object} responses.ErrorResponse
|
||||
// @Router /post/offset/{offset} [get]
|
||||
func (r *PostController) GetAllWithOffset(c *gin.Context) {
|
||||
offset_param := c.Param("offset")
|
||||
offset, err := strconv.Atoi(offset_param)
|
||||
if err != nil {
|
||||
log.Println("Post get all with offset error: ", err)
|
||||
resp := responses.CreateErrorResponse(http.StatusBadRequest, "Bad request")
|
||||
resp := responses.CreateErrorResponse(http.StatusBadRequest, "Invalid offset value")
|
||||
c.JSON(resp.ErrorCode, resp)
|
||||
return
|
||||
}
|
||||
|
||||
result, err := r.service.GetAllOffset(offset)
|
||||
if err != nil {
|
||||
log.Println("Post get all with offset error: ", err)
|
||||
resp := responses.CreateErrorResponse(http.StatusBadRequest, "Bad request")
|
||||
resp := utils.HandleError(err)
|
||||
c.JSON(resp.ErrorCode, resp)
|
||||
return
|
||||
}
|
||||
|
|
@ -140,6 +139,8 @@ func (r *PostController) GetAllWithOffset(c *gin.Context) {
|
|||
// @Produce json
|
||||
// @Success 200 {array} responses.PostResponse
|
||||
// @Failure 400 {object} responses.ErrorResponse
|
||||
// @Failure 404 {object} responses.ErrorResponse
|
||||
// @Failure 500 {object} responses.ErrorResponse
|
||||
// @Router /post/{id} [get]
|
||||
func (r *PostController) GetById(c *gin.Context) {
|
||||
id := c.Param("id")
|
||||
|
|
@ -158,8 +159,7 @@ func (r *PostController) GetById(c *gin.Context) {
|
|||
|
||||
posts, err := r.service.FindById(query)
|
||||
if err != nil {
|
||||
log.Println("Post service error: ", err)
|
||||
resp := responses.CreateErrorResponse(http.StatusBadRequest, "Bad request")
|
||||
resp := utils.HandleError(err)
|
||||
c.JSON(resp.ErrorCode, resp)
|
||||
return
|
||||
}
|
||||
|
|
@ -181,6 +181,8 @@ func (r *PostController) GetById(c *gin.Context) {
|
|||
// @Produce json
|
||||
// @Success 200 {object} responses.PostResponse
|
||||
// @Failure 400 {object} responses.ErrorResponse
|
||||
// @Failure 404 {object} responses.ErrorResponse
|
||||
// @Failure 500 {object} responses.ErrorResponse
|
||||
// @Router /post/{id} [put]
|
||||
func (r *PostController) Put(c *gin.Context) {
|
||||
var request requests.PutPostRequest
|
||||
|
|
@ -189,14 +191,14 @@ func (r *PostController) Put(c *gin.Context) {
|
|||
id_valid, err := uuid.Parse(id)
|
||||
if err != nil {
|
||||
log.Println("Post: invalid post id: ", err)
|
||||
resp := responses.CreateErrorResponse(http.StatusBadRequest, "Bad request")
|
||||
resp := responses.CreateErrorResponse(http.StatusBadRequest, err.Error())
|
||||
c.JSON(resp.ErrorCode, resp)
|
||||
return
|
||||
}
|
||||
|
||||
if err := c.BindJSON(request); err != nil {
|
||||
log.Println("Post request error: ", err)
|
||||
resp := responses.CreateErrorResponse(http.StatusBadRequest, "Bad request")
|
||||
resp := responses.CreateErrorResponse(http.StatusBadRequest, err.Error())
|
||||
c.JSON(resp.ErrorCode, resp)
|
||||
return
|
||||
}
|
||||
|
|
@ -210,8 +212,7 @@ func (r *PostController) Put(c *gin.Context) {
|
|||
|
||||
post, err := r.service.Update(cmd)
|
||||
if err != nil {
|
||||
log.Println("Post service error: ", err)
|
||||
resp := responses.CreateErrorResponse(http.StatusBadRequest, "Bad request")
|
||||
resp := utils.HandleError(err)
|
||||
c.JSON(resp.ErrorCode, resp)
|
||||
return
|
||||
}
|
||||
|
|
@ -229,13 +230,15 @@ func (r *PostController) Put(c *gin.Context) {
|
|||
// @Produce json
|
||||
// @Success 200
|
||||
// @Failure 400 {object} responses.ErrorResponse
|
||||
// @Failure 404 {object} responses.ErrorResponse
|
||||
// @Failure 500 {object} responses.ErrorResponse
|
||||
// @Router /post/{id} [delete]
|
||||
func (r *PostController) Delete(c *gin.Context) {
|
||||
id := c.Param("id")
|
||||
id_valid, err := uuid.Parse(id)
|
||||
if err != nil {
|
||||
log.Println("Post: invalid post id: ", err)
|
||||
resp := responses.CreateErrorResponse(http.StatusBadRequest, "Bad request")
|
||||
resp := responses.CreateErrorResponse(http.StatusBadRequest, err.Error())
|
||||
c.JSON(resp.ErrorCode, resp)
|
||||
return
|
||||
}
|
||||
|
|
@ -245,8 +248,7 @@ func (r *PostController) Delete(c *gin.Context) {
|
|||
}
|
||||
err = r.service.Delete(cmd)
|
||||
if err != nil {
|
||||
log.Println("Post delete error: ", err)
|
||||
resp := responses.CreateErrorResponse(http.StatusBadRequest, "Bad request")
|
||||
resp := utils.HandleError(err)
|
||||
c.JSON(resp.ErrorCode, resp)
|
||||
return
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,19 +33,21 @@ func CreateUserController(service *services.UserService) UserController {
|
|||
// @Param request body requests.CreateUserRequest true "User data"
|
||||
// @Success 201 {object} responses.UserResponse
|
||||
// @Failure 400 {object} responses.ErrorResponse
|
||||
// @Failure 409 {object} responses.ErrorResponse
|
||||
// @Failure 500 {object} responses.ErrorResponse
|
||||
// @Router /user/ [post]
|
||||
func (r *UserController) Post(c *gin.Context) {
|
||||
var request requests.CreateUserRequest
|
||||
if err := c.BindJSON(&request); err != nil {
|
||||
log.Println("User invalid request: ", err)
|
||||
resp := responses.CreateErrorResponse(http.StatusBadRequest, "Bad request")
|
||||
resp := responses.CreateErrorResponse(http.StatusBadRequest, err.Error())
|
||||
c.JSON(resp.ErrorCode, resp)
|
||||
return
|
||||
}
|
||||
|
||||
encrypted_password, err := utils.EncryptPassword(request.Password)
|
||||
if err != nil {
|
||||
log.Println("User encrupt password error: ", err)
|
||||
log.Println("User encrypt password error: ", err)
|
||||
resp := responses.CreateErrorResponse(http.StatusInternalServerError, "Internal server error")
|
||||
c.JSON(resp.ErrorCode, resp)
|
||||
return
|
||||
|
|
@ -58,8 +60,7 @@ func (r *UserController) Post(c *gin.Context) {
|
|||
|
||||
user, err := r.service.Create(cmd)
|
||||
if err != nil {
|
||||
log.Println("User service error: ", err)
|
||||
resp := responses.CreateErrorResponse(http.StatusBadRequest, "Bad request")
|
||||
resp := utils.HandleError(err)
|
||||
c.JSON(resp.ErrorCode, resp)
|
||||
return
|
||||
}
|
||||
|
|
@ -77,6 +78,8 @@ func (r *UserController) Post(c *gin.Context) {
|
|||
// @Param id path string true "user id"
|
||||
// @Success 200 {object} responses.UserResponse
|
||||
// @Failure 400 {object} responses.ErrorResponse
|
||||
// @Failure 404 {object} responses.ErrorResponse
|
||||
// @Failure 500 {object} responses.ErrorResponse
|
||||
// @Router /user/{id} [get]
|
||||
func (r *UserController) FindById(c *gin.Context) {
|
||||
id_path := c.Param("id")
|
||||
|
|
@ -84,7 +87,7 @@ func (r *UserController) FindById(c *gin.Context) {
|
|||
id, err := uuid.Parse(id_path)
|
||||
if err != nil {
|
||||
log.Println("User id error: ", err)
|
||||
resp := responses.CreateErrorResponse(http.StatusBadRequest, "Bad request")
|
||||
resp := responses.CreateErrorResponse(http.StatusBadRequest, "Invalid user id")
|
||||
c.JSON(resp.ErrorCode, resp)
|
||||
return
|
||||
}
|
||||
|
|
@ -95,8 +98,7 @@ func (r *UserController) FindById(c *gin.Context) {
|
|||
|
||||
user, err := r.service.FindById(query)
|
||||
if err != nil {
|
||||
log.Println("User service error: ", err)
|
||||
resp := responses.CreateErrorResponse(http.StatusNotFound, "Not found")
|
||||
resp := utils.HandleError(err)
|
||||
c.JSON(resp.ErrorCode, resp)
|
||||
return
|
||||
}
|
||||
|
|
@ -113,6 +115,8 @@ func (r *UserController) FindById(c *gin.Context) {
|
|||
// @Param name path string true "User name"
|
||||
// @Success 200 {object} responses.UserResponse
|
||||
// @Failure 400 {object} responses.ErrorResponse
|
||||
// @Failure 404 {object} responses.ErrorResponse
|
||||
// @Failure 500 {object} responses.ErrorResponse
|
||||
// @Router /user/name/{name} [get]
|
||||
func (r *UserController) FindByName(c *gin.Context) {
|
||||
name := c.Param("name")
|
||||
|
|
@ -123,8 +127,7 @@ func (r *UserController) FindByName(c *gin.Context) {
|
|||
|
||||
user, err := r.service.FindByName(query)
|
||||
if err != nil {
|
||||
log.Println("User service error: ", err)
|
||||
resp := responses.CreateErrorResponse(http.StatusNotFound, "Not found")
|
||||
resp := utils.HandleError(err)
|
||||
c.JSON(resp.ErrorCode, resp)
|
||||
return
|
||||
}
|
||||
|
|
@ -139,12 +142,12 @@ func (r *UserController) FindByName(c *gin.Context) {
|
|||
// @Produce json
|
||||
// @Success 200 {object} responses.UserResponseList
|
||||
// @Failure 400 {object} responses.ErrorResponse
|
||||
// @Failure 500 {object} responses.ErrorResponse
|
||||
// @Router /user/ [get]
|
||||
func (r *UserController) GetAll(c *gin.Context) {
|
||||
users, err := r.service.GetAll()
|
||||
if err != nil {
|
||||
log.Println("User service error: ", err)
|
||||
resp := responses.CreateErrorResponse(http.StatusInternalServerError, "Internal server error")
|
||||
resp := utils.HandleError(err)
|
||||
c.JSON(resp.ErrorCode, resp)
|
||||
return
|
||||
}
|
||||
|
|
@ -162,6 +165,8 @@ func (r *UserController) GetAll(c *gin.Context) {
|
|||
// @Param request body requests.PutUserRequest true "User data"
|
||||
// @Success 200 {object} responses.UserResponse
|
||||
// @Failure 400 {object} responses.ErrorResponse
|
||||
// @Failure 404 {object} responses.ErrorResponse
|
||||
// @Failure 500 {object} responses.ErrorResponse
|
||||
// @Router /user/{id} [put]
|
||||
func (r *UserController) Put(c *gin.Context) {
|
||||
var request requests.PutUserRequest
|
||||
|
|
@ -170,14 +175,14 @@ func (r *UserController) Put(c *gin.Context) {
|
|||
id, err := uuid.Parse(id_path)
|
||||
if err != nil {
|
||||
log.Println("User id error: ", err)
|
||||
resp := responses.CreateErrorResponse(http.StatusBadRequest, "Bad request")
|
||||
resp := responses.CreateErrorResponse(http.StatusBadRequest, "Invalid user ID")
|
||||
c.JSON(resp.ErrorCode, resp)
|
||||
return
|
||||
}
|
||||
|
||||
if err := c.BindJSON(&request); err != nil {
|
||||
log.Println("User request error: ", err)
|
||||
resp := responses.CreateErrorResponse(http.StatusBadRequest, "Bad request")
|
||||
resp := responses.CreateErrorResponse(http.StatusBadRequest, err.Error())
|
||||
c.JSON(resp.ErrorCode, resp)
|
||||
return
|
||||
}
|
||||
|
|
@ -198,8 +203,7 @@ func (r *UserController) Put(c *gin.Context) {
|
|||
|
||||
user, err := r.service.Update(cmd)
|
||||
if err != nil {
|
||||
log.Println("User service error: ", err)
|
||||
resp := responses.CreateErrorResponse(http.StatusInternalServerError, "Internal server error")
|
||||
resp := utils.HandleError(err)
|
||||
c.JSON(resp.ErrorCode, resp)
|
||||
return
|
||||
}
|
||||
|
|
@ -215,6 +219,8 @@ func (r *UserController) Put(c *gin.Context) {
|
|||
// @Param id path string true "User id"
|
||||
// @Success 200
|
||||
// @Failure 400 {object} responses.ErrorResponse
|
||||
// @Failure 404 {object} responses.ErrorResponse
|
||||
// @Failure 500 {object} responses.ErrorResponse
|
||||
// @Router /user/{id} [delete]
|
||||
func (r *UserController) Delete(c *gin.Context) {
|
||||
id_path := c.Param("id")
|
||||
|
|
@ -222,7 +228,7 @@ func (r *UserController) Delete(c *gin.Context) {
|
|||
id, err := uuid.Parse(id_path)
|
||||
if err != nil {
|
||||
log.Println("User id error: ", err)
|
||||
resp := responses.CreateErrorResponse(http.StatusBadRequest, "Bad request")
|
||||
resp := responses.CreateErrorResponse(http.StatusBadRequest, "Invalid user id")
|
||||
c.JSON(resp.ErrorCode, resp)
|
||||
return
|
||||
}
|
||||
|
|
@ -232,8 +238,7 @@ func (r *UserController) Delete(c *gin.Context) {
|
|||
}
|
||||
|
||||
if err := r.service.Delete(cmd); err != nil {
|
||||
log.Println("User service error: ", err)
|
||||
resp := responses.CreateErrorResponse(http.StatusNotFound, "User not found")
|
||||
resp := utils.HandleError(err)
|
||||
c.JSON(resp.ErrorCode, resp)
|
||||
return
|
||||
}
|
||||
|
|
|
|||
30
internal/utils/error_handler.go
Normal file
30
internal/utils/error_handler.go
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
package utils
|
||||
|
||||
import (
|
||||
ie "58team_blog/internal/application/errors"
|
||||
"58team_blog/internal/interfaces/api/responses"
|
||||
"errors"
|
||||
"log"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
func HandleError(err error) responses.ErrorResponse {
|
||||
var errorCode int
|
||||
errorMsg := err.Error()
|
||||
|
||||
log.Println(err)
|
||||
|
||||
if errors.Is(&ie.ValidationError{}, err) {
|
||||
errorCode = http.StatusBadRequest
|
||||
} else if errors.Is(&ie.NotFoundError{}, err) {
|
||||
errorCode = http.StatusNotFound
|
||||
} else if errors.Is(&ie.AlreadyExistsError{}, err) {
|
||||
errorCode = http.StatusConflict
|
||||
} else if errors.Is(&ie.DBError{}, err) {
|
||||
errorCode = http.StatusInternalServerError
|
||||
} else {
|
||||
errorCode = http.StatusInternalServerError
|
||||
}
|
||||
|
||||
return responses.CreateErrorResponse(errorCode, errorMsg)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue