package handler import ( "github.com/gin-gonic/gin" "github.com/sundynix/pets-be/internal/middleware" appjwt "github.com/sundynix/pets-be/pkg/jwt" "github.com/sundynix/pets-be/pkg/response" ) type loginReq struct { Nickname string `json:"nickname"` } // Login 开发态 Mock 登录 func (h *Handler) Login(c *gin.Context) { if !h.cfg.Auth.DevLogin { response.Fail(c, 40300, "开发登录未开启,请使用微信登录") return } var req loginReq _ = c.ShouldBindJSON(&req) user, err := h.svc.MockLogin(req.Nickname) if err != nil { response.FailErr(c, err) return } token, err := h.jwt.Generate(user.ID, appjwt.KindUser, user.Nickname, "") if err != nil { response.FailErr(c, err) return } response.OK(c, gin.H{"token": token, "user": user}) } type wechatLoginReq struct { Code string `json:"code"` Nickname string `json:"nickname"` Avatar string `json:"avatar"` } // WechatLogin 微信小程序登录:前端 wx.login 拿 code 传入 func (h *Handler) WechatLogin(c *gin.Context) { var req wechatLoginReq if err := c.ShouldBindJSON(&req); err != nil { response.FailParams(c, err.Error()) return } if req.Code == "" { response.FailParams(c, "缺少 code") return } user, err := h.svc.WechatLogin(req.Code) if err != nil { response.Fail(c, 40100, err.Error()) return } // 可选:首次登录写入用户授权的昵称/头像 if fields := map[string]any{}; true { if req.Nickname != "" && user.Nickname == "微信用户" { fields["nickname"] = req.Nickname } if req.Avatar != "" && user.Avatar == "" { fields["avatar"] = req.Avatar } if len(fields) > 0 { if u, e := h.svc.UpdateUser(user.ID, fields); e == nil { user = u } } } token, err := h.jwt.Generate(user.ID, appjwt.KindUser, user.Nickname, "") if err != nil { response.FailErr(c, err) return } response.OK(c, gin.H{"token": token, "user": user}) } // Profile 当前用户资料 func (h *Handler) Profile(c *gin.Context) { user, err := h.svc.GetUser(middleware.UserID(c)) if err != nil { response.FailErr(c, err) return } response.OK(c, user) } type updateProfileReq struct { Nickname *string `json:"nickname"` Avatar *string `json:"avatar"` Phone *string `json:"phone"` } // UpdateProfile 更新资料 func (h *Handler) UpdateProfile(c *gin.Context) { var req updateProfileReq if err := c.ShouldBindJSON(&req); err != nil { response.FailParams(c, err.Error()) return } fields := map[string]any{} if req.Nickname != nil { fields["nickname"] = *req.Nickname } if req.Avatar != nil { fields["avatar"] = *req.Avatar } if req.Phone != nil { fields["phone"] = *req.Phone } user, err := h.svc.UpdateUser(middleware.UserID(c), fields) if err != nil { response.FailErr(c, err) return } response.OK(c, user) }