package repos import ( "context" "gralias/models" "github.com/jmoiron/sqlx" ) type PlayerStatsRepo interface { GetPlayerStats(ctx context.Context, username string) (*models.PlayerStats, error) GetAllPlayerStats(ctx context.Context) ([]*models.PlayerStats, error) UpdatePlayerStats(ctx context.Context, stats *models.PlayerStats) error CreatePlayerStats(ctx context.Context, username string) error } func (p *RepoProvider) GetPlayerStats(ctx context.Context, username string) (*models.PlayerStats, error) { stats := &models.PlayerStats{} err := sqlx.GetContext(ctx, p.DB, stats, "SELECT * FROM player_stats WHERE username = ?", username) return stats, err } func (p *RepoProvider) GetAllPlayerStats(ctx context.Context) ([]*models.PlayerStats, error) { var stats []*models.PlayerStats err := sqlx.SelectContext(ctx, p.DB, &stats, "SELECT * FROM player_stats ORDER BY games_won DESC") return stats, err } func (p *RepoProvider) UpdatePlayerStats(ctx context.Context, stats *models.PlayerStats) error { _, err := p.DB.NamedExecContext(ctx, `UPDATE player_stats SET games_played = :games_played, games_won = :games_won, games_lost = :games_lost, opened_opposite_words = :opened_opposite_words, opened_white_words = :opened_white_words, opened_black_words = :opened_black_words, mime_winrate = :mime_winrate, guesser_winrate = :guesser_winrate, played_as_mime = :played_as_mime, played_as_guesser = :played_as_guesser, rating = :rating WHERE username = :username`, stats) return err } func (p *RepoProvider) CreatePlayerStats(ctx context.Context, username string) error { db := getDB(ctx, p.DB) _, err := db.ExecContext(ctx, "INSERT INTO player_stats (username) VALUES (?)", username) return err }