@@ -0,0 +1,281 @@
|
||||
package checkinctrl
|
||||
|
||||
import (
|
||||
"91porn-server/app/service/checkinser"
|
||||
"91porn-server/common"
|
||||
"91porn-server/common/stderr"
|
||||
"91porn-server/models/v/checkinconfigmod"
|
||||
"91porn-server/models/v/checkinprizemod"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||
)
|
||||
|
||||
// ========== 签到配置 ==========
|
||||
|
||||
// GetCheckinConfig 获取签到配置
|
||||
func GetCheckinConfig(c *gin.Context) {
|
||||
cfg, err := checkinser.GetCheckinConfig()
|
||||
if err != nil {
|
||||
common.ServeJSON(c, stderr.ErrDbQueryError, nil)
|
||||
return
|
||||
}
|
||||
common.ServeJSON(c, stderr.Success, cfg)
|
||||
}
|
||||
|
||||
type checkinConfigUpdateReq struct {
|
||||
Enable *bool `json:"enable" bson:"enable,omitempty"`
|
||||
Description *string `json:"description" bson:"description,omitempty"`
|
||||
BackgroundImage *string `json:"backgroundImage" bson:"backgroundImage,omitempty"`
|
||||
RewardBgVideos *[]rewardBgVideoReq `json:"rewardBgVideos" bson:"rewardBgVideos,omitempty"`
|
||||
IntegerExchangeList *[]giftItemReq `json:"integerExchangeList" bson:"integerExchangeList,omitempty"`
|
||||
}
|
||||
|
||||
type rewardBgVideoReq struct {
|
||||
PrizeType int `json:"prizeType" bson:"prizeType"`
|
||||
BgMediaUrl string `json:"bgMediaUrl" bson:"bgMediaUrl"`
|
||||
FsResourceId string `json:"fsResourceId" bson:"fsResourceId"`
|
||||
FsResourceStatus string `json:"-" bson:"fsResourceStatus"`
|
||||
}
|
||||
|
||||
type giftItemReq struct {
|
||||
Name string `json:"name" bson:"name"`
|
||||
Icon string `json:"icon" bson:"icon"`
|
||||
}
|
||||
|
||||
// UpdateCheckinConfig 修改签到配置
|
||||
func UpdateCheckinConfig(c *gin.Context) {
|
||||
var req checkinConfigUpdateReq
|
||||
if err := c.ShouldBindJSON(&req); err != nil {
|
||||
common.ServeJSON(c, stderr.ErrParamError, err.Error())
|
||||
return
|
||||
}
|
||||
// BgMediaUrl 不以 .m3u8 结尾时自动追加
|
||||
// fsResourceId 变更时重置 fsResourceStatus
|
||||
if req.RewardBgVideos != nil {
|
||||
// 查询当前配置,用于比对 fsResourceId 是否变更
|
||||
oldCfg, _ := checkinconfigmod.FindOne(bson.M{})
|
||||
oldIdMap := make(map[int]string) // prizeType -> fsResourceId
|
||||
oldStatusMap := make(map[int]string) // prizeType -> fsResourceStatus
|
||||
if oldCfg != nil {
|
||||
for _, v := range oldCfg.RewardBgVideos {
|
||||
oldIdMap[int(v.PrizeType)] = v.FsResourceId
|
||||
oldStatusMap[int(v.PrizeType)] = v.FsResourceStatus
|
||||
}
|
||||
}
|
||||
for i := range *req.RewardBgVideos {
|
||||
item := &(*req.RewardBgVideos)[i]
|
||||
if item.BgMediaUrl != "" && !strings.HasSuffix(item.BgMediaUrl, ".m3u8") {
|
||||
item.BgMediaUrl = item.BgMediaUrl + ".m3u8"
|
||||
}
|
||||
// fsResourceId 不为空且与旧值不同,重置状态让定时任务重新检查
|
||||
if item.FsResourceId != "" && item.FsResourceId != oldIdMap[item.PrizeType] {
|
||||
item.FsResourceStatus = ""
|
||||
} else {
|
||||
item.FsResourceStatus = oldStatusMap[item.PrizeType]
|
||||
}
|
||||
}
|
||||
}
|
||||
update := bson.M{"$set": req}
|
||||
if err := checkinser.UpdateCheckinConfig(update); err != nil {
|
||||
common.ServeJSON(c, stderr.ErrDbUpdateError, nil)
|
||||
return
|
||||
}
|
||||
common.ServeJSON(c, stderr.Success, nil)
|
||||
}
|
||||
|
||||
// ========== 签到奖品管理 ==========
|
||||
|
||||
type checkinPrizeListReq struct {
|
||||
PageNumber int64 `json:"pageNumber" form:"pageNumber"`
|
||||
PageSize int64 `json:"pageSize" form:"pageSize"`
|
||||
}
|
||||
|
||||
// GetCheckinPrizeList 获取签到奖品列表
|
||||
func GetCheckinPrizeList(c *gin.Context) {
|
||||
var req checkinPrizeListReq
|
||||
if err := c.ShouldBind(&req); err != nil {
|
||||
common.ServeJSON(c, stderr.ErrParamError, nil)
|
||||
return
|
||||
}
|
||||
if req.PageNumber <= 0 {
|
||||
req.PageNumber = 1
|
||||
}
|
||||
if req.PageSize <= 0 {
|
||||
req.PageSize = 20
|
||||
}
|
||||
list, total, err := checkinser.GetCheckinPrizeList(req.PageNumber, req.PageSize)
|
||||
if err != nil {
|
||||
common.ServeJSON(c, stderr.ErrDbQueryError, nil)
|
||||
return
|
||||
}
|
||||
common.ServeJSON(c, stderr.Success, gin.H{
|
||||
"list": list,
|
||||
"total": total,
|
||||
})
|
||||
}
|
||||
|
||||
// AddOneCheckinPrize 添加签到奖品
|
||||
func AddOneCheckinPrize(c *gin.Context) {
|
||||
var req checkinprizemod.CheckinPrize
|
||||
if err := c.ShouldBindJSON(&req); err != nil {
|
||||
common.ServeJSON(c, stderr.ErrParamError, err.Error())
|
||||
return
|
||||
}
|
||||
if err := checkinser.AddCheckinPrize(&req); err != nil {
|
||||
common.ServeJSON(c, stderr.ErrDbInsertError, nil)
|
||||
return
|
||||
}
|
||||
common.ServeJSON(c, stderr.Success, nil)
|
||||
}
|
||||
|
||||
type checkinPrizeUpdateReq struct {
|
||||
ID string `json:"id"`
|
||||
checkinPrizeParams
|
||||
}
|
||||
|
||||
type checkinPrizeParams struct {
|
||||
Title *string `json:"title" bson:"title,omitempty"`
|
||||
Image *string `json:"image" bson:"image,omitempty"`
|
||||
CheckinDays *int64 `json:"checkinDays" bson:"checkinDays,omitempty"`
|
||||
CheckinType *checkinprizemod.CheckinType `json:"checkinType" bson:"checkinType,omitempty"`
|
||||
PrizeId *string `json:"prizeId" bson:"prizeId,omitempty"`
|
||||
PrizeName *string `json:"prizeName" bson:"prizeName,omitempty"`
|
||||
Status *bool `json:"status" bson:"status,omitempty"`
|
||||
BigPrize *bool `json:"bigPrize" bson:"bigPrize,omitempty"`
|
||||
}
|
||||
|
||||
// UpdateOneCheckinPrize 更新签到奖品
|
||||
func UpdateOneCheckinPrize(c *gin.Context) {
|
||||
var req checkinPrizeUpdateReq
|
||||
if err := c.ShouldBindJSON(&req); err != nil {
|
||||
common.ServeJSON(c, stderr.ErrParamError, nil)
|
||||
return
|
||||
}
|
||||
id, err := primitive.ObjectIDFromHex(req.ID)
|
||||
if err != nil {
|
||||
common.ServeJSON(c, stderr.ErrParamError, "无效的ID")
|
||||
return
|
||||
}
|
||||
now := time.Now()
|
||||
updateFields := bson.M{"updatedAt": now}
|
||||
if req.Title != nil {
|
||||
updateFields["title"] = *req.Title
|
||||
}
|
||||
if req.Image != nil {
|
||||
updateFields["image"] = *req.Image
|
||||
}
|
||||
if req.CheckinDays != nil {
|
||||
updateFields["checkinDays"] = *req.CheckinDays
|
||||
}
|
||||
if req.CheckinType != nil {
|
||||
updateFields["checkinType"] = *req.CheckinType
|
||||
}
|
||||
if req.PrizeId != nil {
|
||||
pid, err := primitive.ObjectIDFromHex(*req.PrizeId)
|
||||
if err == nil {
|
||||
updateFields["prizeId"] = pid
|
||||
}
|
||||
}
|
||||
if req.PrizeName != nil {
|
||||
updateFields["prizeName"] = *req.PrizeName
|
||||
}
|
||||
if req.Status != nil {
|
||||
updateFields["status"] = *req.Status
|
||||
}
|
||||
if req.BigPrize != nil {
|
||||
updateFields["bigPrize"] = *req.BigPrize
|
||||
}
|
||||
if err := checkinser.UpdateCheckinPrize(id, updateFields); err != nil {
|
||||
common.ServeJSON(c, stderr.ErrDbUpdateError, nil)
|
||||
return
|
||||
}
|
||||
common.ServeJSON(c, stderr.Success, nil)
|
||||
}
|
||||
|
||||
type delReq struct {
|
||||
ID string `json:"id"`
|
||||
}
|
||||
|
||||
// DelOneCheckinPrize 删除签到奖品
|
||||
func DelOneCheckinPrize(c *gin.Context) {
|
||||
var req delReq
|
||||
if err := c.ShouldBindJSON(&req); err != nil {
|
||||
common.ServeJSON(c, stderr.ErrParamError, nil)
|
||||
return
|
||||
}
|
||||
id, err := primitive.ObjectIDFromHex(req.ID)
|
||||
if err != nil {
|
||||
common.ServeJSON(c, stderr.ErrParamError, "无效的ID")
|
||||
return
|
||||
}
|
||||
if err := checkinser.DeleteCheckinPrize(id); err != nil {
|
||||
common.ServeJSON(c, stderr.ErrDbDeleteError, nil)
|
||||
return
|
||||
}
|
||||
common.ServeJSON(c, stderr.Success, nil)
|
||||
}
|
||||
|
||||
// ========== 签到历史记录 ==========
|
||||
|
||||
type userCheckinsReq struct {
|
||||
PageNumber int64 `json:"pageNumber" form:"pageNumber"`
|
||||
PageSize int64 `json:"pageSize" form:"pageSize"`
|
||||
UserId uint64 `json:"userId" form:"userId"`
|
||||
Start time.Time `json:"start" form:"start"`
|
||||
End time.Time `json:"end" form:"end"`
|
||||
}
|
||||
|
||||
// GetUserCheckins 获取用户签到记录列表
|
||||
func GetUserCheckins(c *gin.Context) {
|
||||
var req userCheckinsReq
|
||||
if err := c.ShouldBind(&req); err != nil {
|
||||
common.ServeJSON(c, stderr.ErrParamError, nil)
|
||||
return
|
||||
}
|
||||
if req.PageNumber <= 0 {
|
||||
req.PageNumber = 1
|
||||
}
|
||||
if req.PageSize <= 0 {
|
||||
req.PageSize = 20
|
||||
}
|
||||
filter := bson.M{}
|
||||
if req.UserId != 0 {
|
||||
filter["userId"] = req.UserId
|
||||
}
|
||||
if !req.Start.IsZero() && !req.End.IsZero() {
|
||||
filter["createdAt"] = bson.M{"$gte": req.Start, "$lte": req.End}
|
||||
|
||||
}
|
||||
list, total, err := checkinser.GetUserCheckinList(filter, req.PageNumber, req.PageSize)
|
||||
if err != nil {
|
||||
common.ServeJSON(c, stderr.ErrDbQueryError, nil)
|
||||
return
|
||||
}
|
||||
common.ServeJSON(c, stderr.Success, gin.H{
|
||||
"list": list,
|
||||
"total": total,
|
||||
})
|
||||
}
|
||||
|
||||
// DelOneUserCheckin 删除用户签到记录
|
||||
func DelOneUserCheckin(c *gin.Context) {
|
||||
var req delReq
|
||||
if err := c.ShouldBindJSON(&req); err != nil {
|
||||
common.ServeJSON(c, stderr.ErrParamError, nil)
|
||||
return
|
||||
}
|
||||
id, err := primitive.ObjectIDFromHex(req.ID)
|
||||
if err != nil {
|
||||
common.ServeJSON(c, stderr.ErrParamError, "无效的ID")
|
||||
return
|
||||
}
|
||||
if err := checkinser.DeleteUserCheckin(id); err != nil {
|
||||
common.ServeJSON(c, stderr.ErrDbDeleteError, nil)
|
||||
return
|
||||
}
|
||||
common.ServeJSON(c, stderr.Success, nil)
|
||||
}
|
||||
Reference in New Issue
Block a user