mirror of
https://github.com/IS1DI/x0gp.git
synced 2026-07-16 20:47:55 +00:00
Add leaderboard for all tracks and track calendar
This commit is contained in:
@@ -451,3 +451,47 @@ func (s *PgStore) GetDriverLeaderboardProfile(ctx context.Context, driverID stri
|
||||
}
|
||||
return &entry, nil
|
||||
}
|
||||
|
||||
// TrackCalendarInfo holds the basic details of a scheduled track.
|
||||
type TrackCalendarInfo struct {
|
||||
ID int
|
||||
TrackID string
|
||||
TrackName string
|
||||
StartAt time.Time
|
||||
EndAt time.Time
|
||||
}
|
||||
|
||||
// TrackCalendarLeaderboard holds the leaderboard summary for a track calendar event.
|
||||
type TrackCalendarLeaderboard struct {
|
||||
TrackID string
|
||||
TrackName string
|
||||
StartAt time.Time
|
||||
EndAt time.Time
|
||||
Status string // finished, active, planned
|
||||
Podium []LeaderboardEntry
|
||||
CurrentDriver *LeaderboardEntry
|
||||
}
|
||||
|
||||
// GetCalendarLeaderboardTracks returns all track calendar entries joined with their track names, sorted chronologically.
|
||||
func (s *PgStore) GetCalendarLeaderboardTracks(ctx context.Context) ([]TrackCalendarInfo, error) {
|
||||
rows, err := s.pool.Query(ctx, `
|
||||
SELECT tc.id, tc.track_id, t.name, tc.start_at, tc.end_at
|
||||
FROM track_calendar tc
|
||||
JOIN tracks t ON tc.track_id = t.id
|
||||
ORDER BY tc.start_at DESC
|
||||
`)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("query calendar tracks: %w", err)
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
var out []TrackCalendarInfo
|
||||
for rows.Next() {
|
||||
var info TrackCalendarInfo
|
||||
if err := rows.Scan(&info.ID, &info.TrackID, &info.TrackName, &info.StartAt, &info.EndAt); err != nil {
|
||||
return nil, fmt.Errorf("scan calendar track: %w", err)
|
||||
}
|
||||
out = append(out, info)
|
||||
}
|
||||
return out, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user