fix: 修复微信通知字段截断导致的编码错误 feat: 添加有效邀请相关字段和任务中心常量 refactor: 重构一番赏奖品格位逻辑 perf: 优化道具卡列表聚合显示 docs: 更新项目说明文档和API文档 test: 添加字符串截断工具测试
49 lines
1.1 KiB
Go
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
|
|
}
|