Spaces:
Running
Running
| package controllers | |
| import ( | |
| "net/http" | |
| "situkang/dto" | |
| "situkang/services" | |
| "situkang/utils" | |
| "github.com/gin-gonic/gin" | |
| ) | |
| type UserController interface { | |
| GetMe(ctx *gin.Context) | |
| UpdateMe(ctx *gin.Context) | |
| UpdateAvatar(ctx *gin.Context) | |
| UpdateLocation(ctx *gin.Context) | |
| } | |
| type userController struct { | |
| userService services.UserService | |
| } | |
| func NewUserController(userService services.UserService) UserController { | |
| return &userController{userService: userService} | |
| } | |
| func (uc *userController) GetMe(ctx *gin.Context) { | |
| data, err := uc.userService.GetProfile(ctx) | |
| if err != nil { | |
| utils.ResponseFAILED(ctx, nil, err) | |
| return | |
| } | |
| utils.JSONSuccess(ctx, http.StatusOK, "", data, nil) | |
| } | |
| func (uc *userController) UpdateMe(ctx *gin.Context) { | |
| req := RequestJSON[dto.UpdateUserProfileRequest](ctx) | |
| if ctx.IsAborted() { | |
| return | |
| } | |
| data, err := uc.userService.UpdateProfile(ctx, req) | |
| if err != nil { | |
| utils.ResponseFAILED(ctx, nil, err) | |
| return | |
| } | |
| utils.JSONSuccess(ctx, http.StatusOK, "Profil berhasil diperbarui", data, nil) | |
| } | |
| func (uc *userController) UpdateAvatar(ctx *gin.Context) { | |
| file, err := ctx.FormFile("avatar") | |
| if err != nil { | |
| utils.JSONError(ctx, http.StatusBadRequest, "VALIDATION_ERROR", "Avatar file is required", nil) | |
| return | |
| } | |
| avatarURL, err := utils.SaveUploadedFile(ctx, file, "avatars") | |
| if err != nil { | |
| utils.JSONError(ctx, http.StatusBadRequest, "VALIDATION_ERROR", err.Error(), nil) | |
| return | |
| } | |
| data, err := uc.userService.UpdateAvatar(ctx, avatarURL) | |
| if err != nil { | |
| utils.ResponseFAILED(ctx, nil, err) | |
| return | |
| } | |
| utils.JSONSuccess(ctx, http.StatusOK, "Foto profil berhasil diperbarui", data, nil) | |
| } | |
| func (uc *userController) UpdateLocation(ctx *gin.Context) { | |
| req := RequestJSON[dto.UpdateUserLocationRequest](ctx) | |
| if ctx.IsAborted() { | |
| return | |
| } | |
| data, err := uc.userService.UpdateLocation(ctx, req) | |
| if err != nil { | |
| utils.ResponseFAILED(ctx, nil, err) | |
| return | |
| } | |
| utils.JSONSuccess(ctx, http.StatusOK, "Lokasi berhasil diperbarui", data, nil) | |
| } | |