282 lines
8.2 KiB
Go
282 lines
8.2 KiB
Go
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)
|
|
}
|