package roomturnoverreward import ( "sort" "strings" "time" "chatapp3-golang/internal/model" ) func (s *Service) normalizeSysOrigin(sysOrigin string) string { sysOrigin = strings.ToUpper(strings.TrimSpace(sysOrigin)) if sysOrigin != "" { return sysOrigin } if fallback := strings.ToUpper(strings.TrimSpace(s.cfg.RoomTurnoverReward.DefaultSysOrigin)); fallback != "" { return fallback } if fallback := strings.ToUpper(strings.TrimSpace(s.cfg.WeekStar.DefaultSysOrigin)); fallback != "" { return fallback } return "LIKEI" } func (s *Service) defaultTimezone() string { if timezone := strings.TrimSpace(s.cfg.RoomTurnoverReward.Timezone); timezone != "" { return timezone } if timezone := strings.TrimSpace(s.cfg.WeekStar.Timezone); timezone != "" { return timezone } return defaultRoomTurnoverRewardTimezone } func defaultLevelPayloads() []RoomTurnoverRewardLevelPayload { return []RoomTurnoverRewardLevelPayload{ {Level: 1, TurnoverThreshold: 100000, RewardGold: 2000, Enabled: true}, {Level: 2, TurnoverThreshold: 500000, RewardGold: 15000, Enabled: true}, {Level: 3, TurnoverThreshold: 2000000, RewardGold: 80000, Enabled: true}, {Level: 4, TurnoverThreshold: 5000000, RewardGold: 250000, Enabled: true}, } } func buildLevelPayloads(rows []model.RoomTurnoverRewardLevel) []RoomTurnoverRewardLevelPayload { sort.Slice(rows, func(i, j int) bool { return rows[i].Level < rows[j].Level }) result := make([]RoomTurnoverRewardLevelPayload, 0, len(rows)) for _, row := range rows { result = append(result, RoomTurnoverRewardLevelPayload{ ID: row.ID, Level: row.Level, TurnoverThreshold: row.TurnoverThreshold, RewardGold: row.RewardGold, Enabled: row.Enabled, }) } return result } func toRecordView(row model.RoomTurnoverRewardRecord) RoomTurnoverRewardRecordView { return RoomTurnoverRewardRecordView{ ID: row.ID, ConfigID: row.ConfigID, SysOrigin: row.SysOrigin, CycleKey: row.CycleKey, PeriodStartAt: formatDateTime(row.PeriodStartAt), PeriodEndAt: formatDateTime(row.PeriodEndAt), RoomID: row.RoomID, RoomAccount: row.RoomAccount, RoomName: row.RoomName, RoomCover: row.RoomCover, OwnerUserID: row.OwnerUserID, CountryCode: row.CountryCode, CountryName: row.CountryName, TurnoverAmount: row.TurnoverAmount, Level: row.Level, TurnoverThreshold: row.TurnoverThreshold, RewardGold: row.RewardGold, TrackID: row.TrackID, Status: row.Status, RetryCount: row.RetryCount, LastError: row.LastError, SentAt: formatDateTime(pointerTimeValue(row.SentAt)), UpdateTime: formatDateTime(row.UpdateTime), } } func normalizePage(cursor, limit int) (int, int) { if cursor <= 0 { cursor = 1 } if limit <= 0 { limit = 20 } if limit > 100 { limit = 100 } return cursor, limit } func formatDateTime(t time.Time) string { if t.IsZero() { return "" } return t.Format("2006-01-02 15:04:05") } func pointerTimeValue(value *time.Time) time.Time { if value == nil { return time.Time{} } return *value } func truncateString(value string, limit int) string { if limit <= 0 || len(value) <= limit { return value } return value[:limit] }