package admin import ( "sort" "strconv" "strings" "time" ) var accountTodayStatsBatchCache = newSnapshotCache(30 * time.Second) func normalizeAccountIDList(accountIDs []int64) []int64 { if len(accountIDs) == 0 { return nil } seen := make(map[int64]struct{}, len(accountIDs)) out := make([]int64, 0, len(accountIDs)) for _, id := range accountIDs { if id <= 0 { continue } if _, ok := seen[id]; ok { continue } seen[id] = struct{}{} out = append(out, id) } sort.Slice(out, func(i, j int) bool { return out[i] < out[j] }) return out } func buildAccountTodayStatsBatchCacheKey(accountIDs []int64) string { if len(accountIDs) == 0 { return "accounts_today_stats_empty" } var b strings.Builder b.Grow(len(accountIDs) * 6) b.WriteString("accounts_today_stats:") for i, id := range accountIDs { if i > 0 { b.WriteByte(',') } b.WriteString(strconv.FormatInt(id, 10)) } return b.String() }