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

113 lines
3.6 KiB
Go

package activity
import (
"bindbox-game/internal/repository/mysql/dao"
"context"
)
// DeleteActivity 删除活动
// 参数: id 活动ID
// 返回: 错误信息
func (s *service) DeleteActivity(ctx context.Context, id int64) error {
return s.writeDB.Transaction(func(tx *dao.Query) error {
issues, err := tx.ActivityIssues.WithContext(ctx).Where(tx.ActivityIssues.ActivityID.Eq(id)).Find()
if err != nil {
return err
}
var issueIDs []int64
for _, is := range issues {
issueIDs = append(issueIDs, is.ID)
}
var drawLogIDs []int64
if len(issueIDs) > 0 {
logs, err := tx.ActivityDrawLogs.WithContext(ctx).Where(tx.ActivityDrawLogs.IssueID.In(issueIDs...)).Find()
if err != nil {
return err
}
for _, lg := range logs {
drawLogIDs = append(drawLogIDs, lg.ID)
}
}
if len(issueIDs) > 0 {
if _, err = tx.ActivityRewardSettings.WithContext(ctx).Where(tx.ActivityRewardSettings.IssueID.In(issueIDs...)).Delete(); err != nil {
return err
}
if _, err = tx.ActivityDrawEffects.WithContext(ctx).Where(tx.ActivityDrawEffects.IssueID.In(issueIDs...)).Delete(); err != nil {
return err
}
}
if len(drawLogIDs) > 0 {
if _, err = tx.ActivityDrawEffects.WithContext(ctx).Where(tx.ActivityDrawEffects.DrawLogID.In(drawLogIDs...)).Delete(); err != nil {
return err
}
if _, err = tx.ActivityDrawReceipts.WithContext(ctx).Where(tx.ActivityDrawReceipts.DrawLogID.In(drawLogIDs...)).Delete(); err != nil {
return err
}
if _, err = tx.UserItemCards.WithContext(ctx).Where(tx.UserItemCards.UsedDrawLogID.In(drawLogIDs...)).Delete(); err != nil {
return err
}
if _, err = tx.ActivityDrawLogs.WithContext(ctx).Where(tx.ActivityDrawLogs.ID.In(drawLogIDs...)).Delete(); err != nil {
return err
}
}
if _, err = tx.ActivityDrawEffects.WithContext(ctx).Where(tx.ActivityDrawEffects.ActivityID.Eq(id)).Delete(); err != nil {
return err
}
if _, err = tx.UserItemCards.WithContext(ctx).Where(tx.UserItemCards.UsedActivityID.Eq(id)).Delete(); err != nil {
return err
}
if len(issueIDs) > 0 {
if _, err = tx.UserItemCards.WithContext(ctx).Where(tx.UserItemCards.UsedIssueID.In(issueIDs...)).Delete(); err != nil {
return err
}
}
if _, err = tx.UserInventory.WithContext(ctx).Where(tx.UserInventory.ActivityID.Eq(id)).Delete(); err != nil {
return err
}
invs, err := tx.UserInventory.WithContext(ctx).Where(tx.UserInventory.ActivityID.Eq(id)).Find()
if err != nil {
return err
}
var invIDs []int64
for _, iv := range invs {
invIDs = append(invIDs, iv.ID)
}
if len(invIDs) > 0 {
if _, err = tx.ShippingRecords.WithContext(ctx).Where(tx.ShippingRecords.InventoryID.In(invIDs...)).Delete(); err != nil {
return err
}
if _, err = tx.UserInventoryTransfers.WithContext(ctx).Where(tx.UserInventoryTransfers.InventoryID.In(invIDs...)).Delete(); err != nil {
return err
}
}
if _, err = tx.SystemItemCards.WithContext(ctx).Where(tx.SystemItemCards.ActivityID.Eq(id)).Delete(); err != nil {
return err
}
if len(issueIDs) > 0 {
if _, err = tx.SystemItemCards.WithContext(ctx).Where(tx.SystemItemCards.IssueID.In(issueIDs...)).Delete(); err != nil {
return err
}
}
if _, err = tx.SystemCoupons.WithContext(ctx).Where(tx.SystemCoupons.ActivityID.Eq(id)).Delete(); err != nil {
return err
}
if len(issueIDs) > 0 {
if _, err = tx.ActivityIssues.WithContext(ctx).Where(tx.ActivityIssues.ActivityID.Eq(id)).Delete(); err != nil {
return err
}
}
if _, err = tx.Activities.WithContext(ctx).Where(tx.Activities.ID.Eq(id)).Delete(); err != nil {
return err
}
return nil
})
}