All checks were successful
CI / build (push) Successful in 37s
- Add delete all data button with red danger style and confirmation prompt - Add DeleteUserData repo method that wipes user from all tables in a transaction - Add helper methods deleteAccountPrompt and deleteAccountConfirm - Implement consistency_master, perfect_week, remote_veteran, onsite_master achievements - Add GetDailyXPInRange and SumWorkSecondsByWorkType repo methods - Update Dockerfile to alpine3.23, docker-compose to use env vars for proxy/paths
63 lines
2.4 KiB
Go
63 lines
2.4 KiB
Go
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
|
|
}
|