package authapi import ( "videoweb/app/service/authser" "videoweb/app/service/wordsfilterser" "videoweb/pub/common" "videoweb/pub/common/srvdef" "videoweb/pub/common/useragent" "videoweb/pub/pubdef" "github.com/gin-gonic/gin" ) func requestUA(ctx *gin.Context) useragent.UA { ua, _ := common.GetUA(ctx) return ua } type updateProfileReq struct { NickName *string `json:"nickName"` // 新昵称(可选) Avatar *string `json:"avatar"` // 新头像 URL(可选) Introduction *string `json:"introduction"` // 简介(可选) PrivacyMode *bool `json:"privacyMode"` // 隐私模式:true-开启,false-关闭(可选) } // UpdateProfile 修改用户资料 // @Tags 用户认证 // @Summary 修改用户资料(昵称 / 头像 / 简介 / 隐私模式,可任意组合) // @Description 按请求头 X-User-Agent 中的 devID 识别用户;nickName、avatar、introduction、privacyMode 均为可选,至少提供一项。 // @Accept json // @Produce json // @Param param body updateProfileReq true "修改资料参数" // @Success 200 {string} string "成功" // @Failure 400 {string} string "失败" // @Router /api/app/auth/profile [POST] func UpdateProfile(ctx *gin.Context) { userId := common.GetUserId(ctx) if userId <= 0 { common.ServerJSON(ctx, srvdef.InvalidToken, nil) return } var req updateProfileReq if err := ctx.ShouldBind(&req); err != nil { common.ServerJSON(ctx, srvdef.ErrParamError, nil) return } if req.NickName != nil && !wordsfilterser.Validate(*req.NickName) { common.ServerJSON(ctx, srvdef.ErrContainIllegalWord, "包含非法字符") return } serr := authser.UpdateProfile(ctx, &authser.UpdateProfileReq{ UserId: userId, NickName: req.NickName, Avatar: req.Avatar, Introduction: req.Introduction, PrivacyMode: req.PrivacyMode, }) if serr != nil { common.ServerJSON(ctx, serr.Code, serr.Tips) return } common.ServerJSON(ctx, srvdef.Success, "") } // GetInfo 获取当前用户信息 // @Tags 用户认证 // @Summary 获取当前用户信息 // @Description 按请求头 X-User-Agent 中的 devID 识别用户,返回最新用户信息,包含金币余额、VIP状态等 // @Produce json // @Success 200 {object} authser.LoginResp "用户信息" // @Failure 400 {string} string "失败" // @Router /api/app/auth/getInfo [GET] func GetInfo(ctx *gin.Context) { userId := common.GetUserId(ctx) if pubdef.IsCrawlerUser(userId) { common.ServerJSON(ctx, srvdef.Success, authser.CrawlerLoginResp()) return } if userId <= 0 { common.ServerJSON(ctx, srvdef.InvalidToken, nil) return } resp, serr := authser.GetInfo(ctx, userId, requestUA(ctx)) if serr != nil { common.ServerJSON(ctx, serr.Code, serr.Tips) return } common.ServerJSON(ctx, srvdef.Success, resp) }