bindbox-game/internal/service/activity/activity_create.go
邹方成 45815bfb7d chore: 清理无用文件与优化代码结构
refactor(utils): 修复密码哈希比较逻辑错误
feat(user): 新增按状态筛选优惠券接口
docs: 添加虚拟发货与任务中心相关文档
fix(wechat): 修正Code2Session上下文传递问题
test: 补充订单折扣与积分转换测试用例
build: 更新配置文件与构建脚本
style: 清理多余的空行与注释
2025-12-18 17:35:55 +08:00

58 lines
1.6 KiB
Go

package activity
import (
"context"
"strings"
"bindbox-game/internal/repository/mysql/model"
)
// CreateActivity 创建活动
// 参数: in 活动创建输入
// 返回: 新建的活动记录与错误
func (s *service) CreateActivity(ctx context.Context, in CreateActivityInput) (*model.Activities, error) {
item := &model.Activities{
Name: in.Name,
Banner: in.Banner,
Image: in.Image,
GameplayIntro: sanitizeHTML(in.GameplayIntro),
ActivityCategoryID: in.ActivityCategoryID,
Status: in.Status,
PriceDraw: in.PriceDraw,
IsBoss: in.IsBoss,
AllowItemCards: in.AllowItemCards != 0,
AllowCoupons: in.AllowCoupons != 0,
}
if in.StartTime != nil {
item.StartTime = *in.StartTime
}
if in.EndTime != nil {
item.EndTime = *in.EndTime
}
do := s.writeDB.Activities.WithContext(ctx)
if item.Image == "" {
do = do.Omit(s.writeDB.Activities.Image)
}
if item.Banner == "" {
do = do.Omit(s.writeDB.Activities.Banner)
}
if strings.TrimSpace(item.GameplayIntro) == "" {
do = do.Omit(s.writeDB.Activities.GameplayIntro)
}
if in.StartTime == nil {
do = do.Omit(s.writeDB.Activities.StartTime)
}
if in.EndTime == nil {
do = do.Omit(s.writeDB.Activities.EndTime)
}
// 避免零日期写入新增的时间列
do = do.Omit(s.writeDB.Activities.ScheduledTime, s.writeDB.Activities.LastSettledAt)
err := do.Create(item)
if err != nil {
return nil, err
}
return item, nil
}