Files
huangguo_server/models/v/prizemod/web.go
T
rootandClaude Opus 5 8679200f41 Initial commit
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-15 13:57:10 +08:00

128 lines
4.3 KiB
Go

package prizemod
import (
"time"
"91porn-server/models/commod"
"github.com/shopspring/decimal"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
"go.mongodb.org/mongo-driver/mongo/options"
)
// 新增活动奖品
type AddPrizeCond struct {
ActivityID primitive.ObjectID `json:"activityId"` // 活动ID
VIPCardID primitive.ObjectID `json:"vipCardId"` // 会员卡ID
Name string `json:"name" binding:"required"` // 奖品名称
Type PrizeType `json:"type" binding:"required"` // 奖品类型
Count int32 `json:"count"` // 奖品数量
Price int64 `json:"price"` // 奖品价值
Sort int32 `json:"sort"` // 奖品排序
Desc string `json:"desc"` // 奖品描述
Value int64 `json:"value"` // 折扣率/活跃值
Weights decimal.Decimal `json:"weights"` // 中奖权重
Level PrizeLevel `json:"level"` // 奖品等级
Status bool `json:"status"` // 启用/禁用
ValidityTime int64 `json:"validityTime"` // 奖品有效期 单位: 天
Image string `json:"image"` // 图片地址
}
// 修改活动奖品
type ModifyPrizeCond struct {
ID primitive.ObjectID `json:"id" binding:"required"` // 文档ID
ActivityID *primitive.ObjectID `json:"activityId"` // 活动ID
VIPCardID *primitive.ObjectID `json:"vipCardId"` // 会员卡ID
Name *string `json:"name"` // 奖品名称
Type *PrizeType `json:"type"` // 奖品类型
Count *int32 `json:"count"` // 奖品数量
Price *int64 `json:"price"` // 奖品价值
Sort *int32 `json:"sort"` // 奖品排序
Desc *string `json:"desc"` // 奖品描述
Value *int64 `json:"value"` // 折扣率/活跃值
Weights *decimal.Decimal `json:"weights"` // 中奖权重
Level *PrizeLevel `json:"level"` // 奖品等级
Status *bool `json:"status"` // 启用/禁用
ValidityTime *int64 `json:"validityTime"` // 奖品有效期 单位: 天
Image *string `json:"image"` // 图片地址
}
func (m *ModifyPrizeCond) Cond() primitive.M {
return bson.M{"_id": m.ID}
}
func (m *ModifyPrizeCond) Bson() primitive.M {
set := bson.M{"updatedAt": time.Now()}
if m.ActivityID != nil {
set["activityId"] = m.ActivityID
}
if m.VIPCardID != nil {
set["vipCardId"] = m.VIPCardID
}
if m.Name != nil {
set["name"] = m.Name
}
if m.Type != nil {
set["type"] = m.Type
}
if m.Price != nil {
set["price"] = m.Price
}
if m.Value != nil {
set["value"] = m.Value
}
if m.Count != nil {
set["count"] = m.Count
}
if m.Sort != nil {
set["sort"] = m.Sort
}
if m.Desc != nil {
set["desc"] = m.Desc
}
if m.Weights != nil {
set["weights"] = m.Weights
}
if m.Level != nil {
set["level"] = m.Level
}
if m.Status != nil {
set["status"] = m.Status
}
if m.ValidityTime != nil {
set["validityTime"] = m.ValidityTime
}
if m.Image != nil {
set["image"] = m.Image
}
return bson.M{"$set": set}
}
// 查询活动奖品列表
type QueryAllPrizeCond struct {
Status *bool `form:"status"` // 状态---启用/禁用
Type *PrizeType `form:"type"` // 奖品类型
ActivityID *string `form:"activityId"` // 活动ID
commod.Page
}
func (q *QueryAllPrizeCond) Options() *options.FindOptions {
return options.Find().SetLimit(int64(q.PageSize)).SetSkip(int64((q.PageNumber - 1) * q.PageSize)).SetSort(bson.M{"createdAt": -1})
}
func (q *QueryAllPrizeCond) Query() primitive.M {
fliter := bson.M{}
if q.Status != nil {
fliter["status"] = q.Status
}
if q.Type != nil {
fliter["type"] = q.Type
}
if q.ActivityID != nil {
id, _ := primitive.ObjectIDFromHex(*q.ActivityID)
fliter["activityId"] = id
}
return fliter
}