Some checks failed
Build docker and publish / linux (1.24.5) (push) Failing after 25s
feat(admin): 新增工会管理功能 feat(activity): 添加活动管理相关服务 feat(user): 实现用户道具卡和积分管理 feat(guild): 新增工会成员管理功能 fix: 修复数据库连接配置 fix: 修正jwtoken导入路径 fix: 解决端口冲突问题 style: 统一代码格式和注释风格 style: 更新项目常量命名 docs: 添加项目框架和开发规范文档 docs: 更新接口文档注释 chore: 移除无用代码和文件 chore: 更新Makefile和配置文件 chore: 清理日志文件 test: 添加道具卡测试脚本
58 lines
1.6 KiB
Go
58 lines
1.6 KiB
Go
package user
|
||
|
||
import (
|
||
"context"
|
||
"time"
|
||
|
||
"bindbox-game/internal/repository/mysql/model"
|
||
)
|
||
|
||
// AddItemCard 给用户添加道具卡
|
||
// 功能描述:
|
||
// - 根据道具卡模板ID查询模板信息
|
||
// - 验证道具卡状态是否有效(status=1)
|
||
// - 创建用户道具卡记录,继承模板的有效期设置
|
||
// - 支持批量添加,quantity参数控制数量
|
||
//
|
||
// 参数说明:
|
||
// - ctx: 上下文
|
||
// - userID: 用户ID
|
||
// - cardID: 道具卡模板ID
|
||
// - quantity: 添加数量,如果<=0则默认为1
|
||
//
|
||
// 返回说明:
|
||
// - error: 错误信息,包括数据库查询失败、模板不存在等情况
|
||
func (s *service) AddItemCard(ctx context.Context, userID int64, cardID int64, quantity int) error {
|
||
if quantity <= 0 {
|
||
quantity = 1
|
||
}
|
||
tpl, err := s.readDB.SystemItemCards.WithContext(ctx).Where(s.readDB.SystemItemCards.ID.Eq(cardID)).First()
|
||
if err != nil {
|
||
return err
|
||
}
|
||
if tpl == nil || tpl.Status != 1 {
|
||
return nil
|
||
}
|
||
now := time.Now()
|
||
for i := 0; i < quantity; i++ {
|
||
item := &model.UserItemCards{UserID: userID, CardID: cardID, Status: 1}
|
||
if !tpl.ValidStart.IsZero() {
|
||
item.ValidStart = tpl.ValidStart
|
||
} else {
|
||
item.ValidStart = now
|
||
}
|
||
if !tpl.ValidEnd.IsZero() {
|
||
item.ValidEnd = tpl.ValidEnd
|
||
}
|
||
do := s.writeDB.UserItemCards.WithContext(ctx)
|
||
if tpl.ValidEnd.IsZero() {
|
||
do = do.Omit(s.writeDB.UserItemCards.ValidEnd)
|
||
}
|
||
if err := do.Create(item); err != nil {
|
||
return err
|
||
}
|
||
}
|
||
return nil
|
||
}
|
||
|