| package handler |
|
|
| import ( |
| "github.com/Wei-Shaw/sub2api/internal/handler/dto" |
| "github.com/Wei-Shaw/sub2api/internal/pkg/response" |
| middleware2 "github.com/Wei-Shaw/sub2api/internal/server/middleware" |
| "github.com/Wei-Shaw/sub2api/internal/service" |
|
|
| "github.com/gin-gonic/gin" |
| ) |
|
|
| |
| type UserHandler struct { |
| userService *service.UserService |
| } |
|
|
| |
| func NewUserHandler(userService *service.UserService) *UserHandler { |
| return &UserHandler{ |
| userService: userService, |
| } |
| } |
|
|
| |
| type ChangePasswordRequest struct { |
| OldPassword string `json:"old_password" binding:"required"` |
| NewPassword string `json:"new_password" binding:"required,min=6"` |
| } |
|
|
| |
| type UpdateProfileRequest struct { |
| Username *string `json:"username"` |
| } |
|
|
| |
| |
| func (h *UserHandler) GetProfile(c *gin.Context) { |
| subject, ok := middleware2.GetAuthSubjectFromContext(c) |
| if !ok { |
| response.Unauthorized(c, "User not authenticated") |
| return |
| } |
|
|
| userData, err := h.userService.GetByID(c.Request.Context(), subject.UserID) |
| if err != nil { |
| response.ErrorFrom(c, err) |
| return |
| } |
|
|
| response.Success(c, dto.UserFromService(userData)) |
| } |
|
|
| |
| |
| func (h *UserHandler) ChangePassword(c *gin.Context) { |
| subject, ok := middleware2.GetAuthSubjectFromContext(c) |
| if !ok { |
| response.Unauthorized(c, "User not authenticated") |
| return |
| } |
|
|
| var req ChangePasswordRequest |
| if err := c.ShouldBindJSON(&req); err != nil { |
| response.BadRequest(c, "Invalid request: "+err.Error()) |
| return |
| } |
|
|
| svcReq := service.ChangePasswordRequest{ |
| CurrentPassword: req.OldPassword, |
| NewPassword: req.NewPassword, |
| } |
| err := h.userService.ChangePassword(c.Request.Context(), subject.UserID, svcReq) |
| if err != nil { |
| response.ErrorFrom(c, err) |
| return |
| } |
|
|
| response.Success(c, gin.H{"message": "Password changed successfully"}) |
| } |
|
|
| |
| |
| func (h *UserHandler) UpdateProfile(c *gin.Context) { |
| subject, ok := middleware2.GetAuthSubjectFromContext(c) |
| if !ok { |
| response.Unauthorized(c, "User not authenticated") |
| return |
| } |
|
|
| var req UpdateProfileRequest |
| if err := c.ShouldBindJSON(&req); err != nil { |
| response.BadRequest(c, "Invalid request: "+err.Error()) |
| return |
| } |
|
|
| svcReq := service.UpdateProfileRequest{ |
| Username: req.Username, |
| } |
| updatedUser, err := h.userService.UpdateProfile(c.Request.Context(), subject.UserID, svcReq) |
| if err != nil { |
| response.ErrorFrom(c, err) |
| return |
| } |
|
|
| response.Success(c, dto.UserFromService(updatedUser)) |
| } |
|
|