11package controllers
22
33import (
4+ " errors"
5+ " strings"
6+ " net/http"
7+ " gorm.io/gorm"
48 " github.com/labstack/echo/v4"
5- " github.com/pkg/errors"
69 " {{ .ProjectName }}/database"
710 " {{ .ProjectName }}/models"
811 " {{ .ProjectName }}/utils"
912)
1013
1114type UserRepo struct{}
1215
16+
1317func (repo *UserRepo) CreateUser(ctx echo.Context ) error {
1418 var user models.GoEasyCLITestUser
1519
1620 if err := ctx.Bind (&user); err != nil {
17- utils.FailedResponse (ctx, " Failed to bind user data" , err)
18- return err
21+ return utils.FailedResponse (ctx, " Failed to bind user data" , err)
22+
1923 }
2024
2125 if err := models.CreateUser (ctx.Request ().Context (), database.Db , &user); err != nil {
22- utils.ErrorResponse (ctx, " Failed to create user" , err)
23- return err
26+ if errors.Is (err, gorm.ErrDuplicatedKey ) || strings.Contains (err.Error (), " UNIQUE constraint failed" ) {
27+ return ctx.JSON (http.StatusConflict , map[string]string{" error" : " Email already exists" })
28+ }
29+ return utils.ErrorResponse (ctx, " Failed to create user" , err)
30+
2431 }
2532
26- utils.SuccessResponse (ctx, " User created successfully" , user, nil )
27- return nil
28- }
33+ return utils.SuccessResponse (ctx, " User created successfully" , user, nil )
2934
35+ }
3036
3137func (repo *UserRepo) GetAllUsers(ctx echo.Context ) error {
3238 users, err := models.GetAllUsers (ctx.Request ().Context (), database.Db )
3339 if err != nil {
34- utils.ErrorResponse (ctx, " Failed to get users" , err)
35- return err
40+ return utils.ErrorResponse (ctx, " Failed to get users" , err)
3641 }
3742
38- utils.SuccessResponse (ctx, " Users fetched successfully" , users, nil )
39- return nil
40- }
43+ return utils.SuccessResponse (ctx, " Users fetched successfully" , users, nil )
4144
45+ }
4246
4347func (repo *UserRepo) GetUserByID(ctx echo.Context ) error {
4448 user, err := models.GetUserByID (ctx.Request ().Context (), database.Db , ctx.Param (" id" ))
4549 if err != nil {
46- utils.ErrorResponse (ctx, " User not found" , err)
47- return err
50+ return utils.ErrorResponse (ctx, " User not found" , err)
51+
4852 }
4953
50- utils.SuccessResponse (ctx, " User retrieved successfully" , user, nil )
51- return nil
52- }
54+ return utils.SuccessResponse (ctx, " User retrieved successfully" , user, nil )
5355
56+ }
5457
5558func (repo *UserRepo) UpdateUser(ctx echo.Context ) error {
5659 var user models.GoEasyCLITestUser
@@ -61,27 +64,26 @@ func (repo *UserRepo) UpdateUser(ctx echo.Context) error {
6164 }
6265
6366 if user.ID == 0 {
64- utils.FailedResponse (ctx, " Invalid user ID" , nil )
65- return errors.Errorf (" Invalid user ID" )
67+ return utils.FailedResponse (ctx, " Invalid user ID" , nil )
6668 }
6769
6870 if err := models.UpdateUser (ctx.Request ().Context (), database.Db , &user); err != nil {
69- utils.ErrorResponse (ctx, " Failed to update user" , err)
70- return err
71+ if err.Error () == " user not found" {
72+ return ctx.JSON (http.StatusNotFound , map[string]string{" error" : " User not found" })
73+ }
74+ return utils.ErrorResponse (ctx, " Failed to update user" , err)
7175 }
7276
73- utils.SuccessResponse (ctx, " User updated successfully" , user, nil )
74- return nil
77+ return utils.SuccessResponse (ctx, " User updated successfully" , user, nil )
7578}
7679
77-
7880func (repo *UserRepo) DeleteUser(ctx echo.Context ) error {
7981 err := models.DeleteUser (ctx.Request ().Context (), database.Db , ctx.Param (" id" ))
8082 if err != nil {
81- utils.ErrorResponse (ctx, " Failed to delete user" , err)
82- return err
83+ return utils.ErrorResponse (ctx, " Failed to delete user" , err)
84+
8385 }
8486
85- utils.SuccessResponse (ctx, " User deleted successfully" , nil , nil )
86- return nil
87+ return utils.SuccessResponse (ctx, " User deleted successfully" , nil , nil )
88+
8789}
0 commit comments