Skip to content

Commit c3a5d9c

Browse files
committed
feat: add check username endpoint
1 parent 9e024d5 commit c3a5d9c

File tree

4 files changed

+32
-5
lines changed

4 files changed

+32
-5
lines changed

controller/user_controller.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ type (
1616
Me(ctx *gin.Context)
1717
GetUserByUsername(ctx *gin.Context)
1818
UpdateUser(ctx *gin.Context)
19+
CheckUsername(ctx *gin.Context)
1920
}
2021

2122
userController struct {
@@ -119,3 +120,22 @@ func (c *userController) UpdateUser(ctx *gin.Context) {
119120
res := utils.BuildResponseSuccess(dto.MESSAGE_SUCCESS_UPDATE_USER, result)
120121
ctx.JSON(http.StatusOK, res)
121122
}
123+
124+
func (c *userController) CheckUsername(ctx *gin.Context) {
125+
var username dto.CheckUsernameRequest
126+
if err := ctx.ShouldBind(&username); err != nil {
127+
res := utils.BuildResponseFailed(dto.MESSAGE_FAILED_GET_USER_DATA_FROM_BODY, err.Error(), nil)
128+
ctx.AbortWithStatusJSON(http.StatusBadRequest, res)
129+
return
130+
}
131+
132+
_, err := c.userService.GetUserByUsername(ctx.Request.Context(), username.UserName)
133+
if err != nil && err.Error() == dto.ErrUsernameNotFound.Error() {
134+
res := utils.BuildResponseSuccess(dto.MESSAGE_SUCCESS_USERNAME_AVAILABLE, nil)
135+
ctx.JSON(http.StatusOK, res)
136+
return
137+
}
138+
139+
res := utils.BuildResponseFailed(dto.MESSAGE_FAILED_USERNAME_EXISTS, dto.ErrUsernameAlreadyExists.Error(), nil)
140+
ctx.JSON(http.StatusBadRequest, res)
141+
}

dto/user_dto.go

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,14 @@ const (
1616
MESSAGE_FAILED_PROSES_REQUEST = "failed proses request"
1717
MESSAGE_FAILED_DENIED_ACCESS = "denied access"
1818
MESSAGE_FAILED_UPDATE_USER = "failed update user"
19+
MESSAGE_FAILED_USERNAME_EXISTS = "failed get username"
1920

2021
// Success
21-
MESSAGE_SUCCESS_REGISTER_USER = "success create user"
22-
MESSAGE_SUCCESS_GET_USER = "success get user"
23-
MESSAGE_SUCCESS_LOGIN = "success login"
24-
MESSAGE_SUCCESS_UPDATE_USER = "success update user"
22+
MESSAGE_SUCCESS_REGISTER_USER = "success create user"
23+
MESSAGE_SUCCESS_GET_USER = "success get user"
24+
MESSAGE_SUCCESS_LOGIN = "success login"
25+
MESSAGE_SUCCESS_UPDATE_USER = "success update user"
26+
MESSAGE_SUCCESS_USERNAME_AVAILABLE = "username available"
2527
)
2628

2729
var (
@@ -62,4 +64,8 @@ type (
6264
UserLoginResponse struct {
6365
Token string `json:"token"`
6466
}
67+
68+
CheckUsernameRequest struct {
69+
UserName string `json:"username" form:"username" binding:"required"`
70+
}
6571
)

routes/user_route.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ func User(route *gin.Engine, injector *do.Injector) {
1818
// User
1919
routes.POST("/register", userController.Register)
2020
routes.POST("/login", userController.Login)
21+
routes.POST("/check-username", userController.CheckUsername)
2122
routes.GET("/me", middleware.Authenticate(jwtService), userController.Me)
2223
routes.GET("/:username", userController.GetUserByUsername)
2324
routes.PATCH("/update", middleware.Authenticate(jwtService), userController.UpdateUser)

service/user_service.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ func (s *userService) Verify(ctx context.Context, req dto.UserLoginRequest) (dto
9898
func (s *userService) GetUserByUsername(ctx context.Context, username string) (dto.UserResponse, error) {
9999
user, _, err := s.userRepo.CheckUsername(ctx, nil, username)
100100
if err != nil {
101-
return dto.UserResponse{}, dto.ErrGetUserById
101+
return dto.UserResponse{}, dto.ErrUsernameNotFound
102102
}
103103

104104
return dto.UserResponse{

0 commit comments

Comments
 (0)