package handler import ( "affiliate_dash/internal/middleware" "affiliate_dash/internal/pkg/response" "affiliate_dash/internal/service" "github.com/gin-gonic/gin" ) type AuthHandler struct { svc *service.AuthService } func NewAuthHandler(svc *service.AuthService) *AuthHandler { return &AuthHandler{svc: svc} } type loginReq struct { Username string `json:"username" binding:"required"` Password string `json:"password" binding:"required"` } func (h *AuthHandler) Login(c *gin.Context) { var req loginReq if err := c.ShouldBindJSON(&req); err != nil { response.BadRequest(c, "请输入用户名和密码") return } result, err := h.svc.Login(req.Username, req.Password) if err != nil { response.BadRequest(c, err.Error()) return } response.OK(c, result) } func (h *AuthHandler) Profile(c *gin.Context) { user, err := h.svc.GetProfile(middleware.GetUserID(c)) if err != nil { response.NotFound(c, "用户不存在") return } response.OK(c, user) } type changePasswordReq struct { CurrentPassword string `json:"current_password" binding:"required"` NewPassword string `json:"new_password" binding:"required,min=8"` } type updateCurrentAccountReq struct { CurrentPassword string `json:"current_password" binding:"required"` Username string `json:"username" binding:"required"` Nickname string `json:"nickname"` NewPassword string `json:"new_password" binding:"omitempty,min=8"` } func (h *AuthHandler) ChangePassword(c *gin.Context) { var req changePasswordReq if err := c.ShouldBindJSON(&req); err != nil { response.BadRequest(c, "请填写当前密码和至少 8 位的新密码") return } if err := h.svc.ChangePassword(middleware.GetUserID(c), req.CurrentPassword, req.NewPassword); err != nil { response.BadRequest(c, err.Error()) return } response.OK(c, nil) } func (h *AuthHandler) UpdateCurrentAccount(c *gin.Context) { var req updateCurrentAccountReq if err := c.ShouldBindJSON(&req); err != nil { response.BadRequest(c, "请填写用户名和当前密码;新密码至少 8 位") return } user, err := h.svc.UpdateCurrentAccount(middleware.GetUserID(c), service.UpdateCurrentAccountInput{ CurrentPassword: req.CurrentPassword, Username: req.Username, Nickname: req.Nickname, NewPassword: req.NewPassword, }) if err != nil { response.BadRequest(c, err.Error()) return } response.OK(c, user) }