70 lines
2.2 KiB
Go
70 lines
2.2 KiB
Go
package active2023ctrl
|
|
|
|
import (
|
|
"91porn-server/app/appg"
|
|
"91porn-server/app/service/active2023ser"
|
|
"91porn-server/common"
|
|
"91porn-server/common/constant/redisconst"
|
|
"91porn-server/common/log"
|
|
"91porn-server/common/stderr"
|
|
"91porn-server/models/v/usermod"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
// UserInfo doc
|
|
// @Summary 抽奖
|
|
// @Description 抽奖
|
|
// @Tags annou
|
|
// @Accept mpfd,json
|
|
// @Produce json,html
|
|
// @Success 200 {string} json "{"msg": "操作成功"}"
|
|
// @Failure 400 {string} json "{"msg": "操作失败"}"
|
|
// @Router /api/app/active2023/lottery [post]
|
|
func Lottery(ctx *gin.Context) {
|
|
uid, err := common.GetUID(ctx)
|
|
if err != nil && err != common.ErrUserNotExist {
|
|
common.ServeJSON(ctx, stderr.UserIsNotExists, nil)
|
|
return
|
|
}
|
|
if uid == 0 {
|
|
common.ServeJSON(ctx, stderr.UserIsNotExists, nil)
|
|
return
|
|
}
|
|
var req active2023ser.LotteryReq
|
|
if err = ctx.ShouldBind(&req); err != nil {
|
|
common.ServeJSON(ctx, stderr.ErrParamError, nil)
|
|
return
|
|
}
|
|
if len(req.Prizes) == 0 {
|
|
common.ServeJSON(ctx, stderr.ErrParamError, "获奖为空")
|
|
return
|
|
}
|
|
userInfo, err := usermod.RefreshCacheAndGetUser(uid) // 因为抽奖可能会频繁刷新用户权益, 因此需要刷新用户缓存以保证获取用户最新信息
|
|
if err != nil {
|
|
common.ServeJSON(ctx, stderr.ErrServerUnavailable, "")
|
|
return
|
|
}
|
|
if userInfo == nil {
|
|
common.ServeJSON(ctx, stderr.UserIsNotExists, "用户不存在")
|
|
return
|
|
}
|
|
redisKey := redisconst.GetUserActive2023RedisKey(uid)
|
|
success, err := appg.Redis.Setnx_NewOK(redisKey, "1", redisconst.GetUserActive2023Expred())
|
|
if err != nil {
|
|
common.ServeJSON(ctx, stderr.ErrServerUnavailable, "")
|
|
return
|
|
}
|
|
if !success {
|
|
common.ServeJSON(ctx, stderr.ErrServerUnavailable, "请求过于频繁, 请稍后再试")
|
|
return
|
|
}
|
|
defer func() { _, _ = appg.Redis.Del(redisKey) }()
|
|
if err = active2023ser.Lottery(userInfo, req); err != nil {
|
|
common.ServeJSON(ctx, stderr.ErrServerUnavailable, err.Error())
|
|
return
|
|
}
|
|
log.Info("lottery success", log.Any("uid", uid), log.Any("count", req.Count), log.Any("gold cost", req.Gold), log.Any("prizes", req.Prizes))
|
|
common.ServeJSON(ctx, stderr.Success, "")
|
|
}
|