package repo import "worktimeBot/internal/domain" type Repository interface { // Users GetOrCreateUser(chatID int64) (*domain.User, error) UpdateUser(user *domain.User) error GetAllUsers() ([]domain.User, error) // Settings GetOrCreateSettings(userID int64) (*domain.UserSettings, error) UpdateSettings(st *domain.UserSettings) error MarkReportSent(userID int64, date string) error // Days GetOrCreateDay(userID int64, date string) (*domain.Day, error) GetDay(userID int64, date string) (*domain.Day, error) UpdateDay(day *domain.Day) error GetUserDaysInRange(userID int64, start, end string) ([]domain.Day, error) SetDayOff(userID int64, date, reason string) error RemoveDayOff(userID int64, date string) error // Events CreateEvent(userID, dayID int64, eventType string, workTypeID *int64, occurredAt int64, note string) error GetLastEvent(userID int64) (*domain.Event, error) EventsForDayByDate(userID int64, date string) ([]domain.Event, error) EventsForDayByDayID(dayID int64) ([]domain.Event, error) GetEventByID(eventID, userID int64) (*domain.Event, error) UpdateEventTime(eventID int64, occurredAt int64) error UpdateEventWorkType(eventID, workTypeID int64) error SetEventNote(eventID int64, note string) error DeleteEvent(eventID int64) error GetDistinctEventDates(userID int64, start, end string) ([]string, error) GetDatesWithEvents(userID int64) ([]string, error) // Work Types GetWorkTypes() ([]domain.WorkType, error) GetWorkType(id int64) (*domain.WorkType, error) // RPG GetOrCreateRPGStats(userID int64) (*domain.RPGStats, error) UpdateRPGStats(stats *domain.RPGStats) error UpsertDailyXP(userID int64, date string, xpEarned, workSeconds int64) error SetDailyWorkSeconds(userID int64, date string, workSeconds int64) error SumDailyWorkSeconds(userID int64) (int64, error) GetDailyXPInRange(userID int64, start, end string) ([]domain.DailyXP, error) SumWorkSecondsByWorkType(userID int64) (remoteSeconds, onsiteSeconds int64, _ error) // Achievements GetAchievementByCode(code string) (*domain.Achievement, error) UnlockAchievement(userID, achievementID int64) (bool, error) HasAchievement(userID int64, code string) (bool, error) GetUserAchievements(userID int64) ([]domain.UserAchievement, error) // League GetLeagueRankings(orderBy string) ([]domain.LeagueEntry, error) // Lifecycle DeleteUserData(userID int64) error Close() error }