邹方成 a7a0f639e1 feat: 新增取消发货功能并优化任务中心
fix: 修复微信通知字段截断导致的编码错误
feat: 添加有效邀请相关字段和任务中心常量
refactor: 重构一番赏奖品格位逻辑
perf: 优化道具卡列表聚合显示
docs: 更新项目说明文档和API文档
test: 添加字符串截断工具测试
2025-12-23 22:26:07 +08:00

49 lines
1.1 KiB
Go

package taskcenter
import (
tcmodel "bindbox-game/internal/repository/mysql/task_center"
"context"
"encoding/json"
"time"
"gorm.io/gorm"
)
const activeTasksCacheKey = "task_center:active_tasks"
func (s *service) invalidateCache(ctx context.Context) error {
if s.redis == nil {
return nil
}
return s.redis.Del(ctx, activeTasksCacheKey).Err()
}
func (s *service) getActiveTasks(ctx context.Context) ([]tcmodel.Task, error) {
// 1. Try Redis
if s.redis != nil {
val, err := s.redis.Get(ctx, activeTasksCacheKey).Result()
if err == nil {
var tasks []tcmodel.Task
if err := json.Unmarshal([]byte(val), &tasks); err == nil {
return tasks, nil
}
}
}
// 2. Fallback to DB
var tasks []tcmodel.Task
if err := s.repo.GetDbR().Preload("Tiers", func(db *gorm.DB) *gorm.DB {
return db.Order("priority asc, id asc")
}).Preload("Rewards").Where("status=1").Find(&tasks).Error; err != nil {
return nil, err
}
// 3. Write back to Redis
if s.redis != nil && len(tasks) > 0 {
b, _ := json.Marshal(tasks)
_ = s.redis.Set(ctx, activeTasksCacheKey, string(b), 1*time.Hour).Err()
}
return tasks, nil
}