- Introduced EventWithSettings and EventWithSettingsRes structs for enhanced event data handling. - Implemented conversion functions for creating and updating event settings. - Added support for fetching events with settings from the database. - Created new report data structures for comprehensive reporting capabilities. - Implemented event statistics retrieval and filtering by league and sport. - Added handlers for event statistics endpoints in the web server. - Introduced DateInterval type for managing time intervals in reports.
123 lines
3.5 KiB
SQL
123 lines
3.5 KiB
SQL
-- name: GetTotalEventStats :one
|
|
SELECT COUNT(*) AS event_count,
|
|
COUNT(*) FILTER (
|
|
WHERE events.default_is_active = TRUE
|
|
) AS total_active_events,
|
|
COUNT(*) FILTER (
|
|
WHERE events.default_is_active = FALSE
|
|
) AS total_inactive_events,
|
|
COUNT(*) FILTER (
|
|
WHERE events.default_is_featured = TRUE
|
|
) AS total_featured_events,
|
|
COUNT(DISTINCT league_id) as total_leagues,
|
|
COUNT(*) FILTER (
|
|
WHERE events.status = 'upcoming'
|
|
) AS pending,
|
|
COUNT(*) FILTER (
|
|
WHERE events.status = 'in_play'
|
|
) AS in_play,
|
|
COUNT(*) FILTER (
|
|
WHERE events.status = 'to_be_fixed'
|
|
) AS to_be_fixed,
|
|
COUNT(*) FILTER (
|
|
WHERE events.status = 'ended'
|
|
) AS ended,
|
|
COUNT(*) FILTER (
|
|
WHERE events.status = 'postponed'
|
|
) AS postponed,
|
|
COUNT(*) FILTER (
|
|
WHERE events.status = 'cancelled'
|
|
) AS cancelled,
|
|
COUNT(*) FILTER (
|
|
WHERE events.status = 'walkover'
|
|
) AS walkover,
|
|
COUNT(*) FILTER (
|
|
WHERE events.status = 'interrupted'
|
|
) AS interrupted,
|
|
COUNT(*) FILTER (
|
|
WHERE events.status = 'abandoned'
|
|
) AS abandoned,
|
|
COUNT(*) FILTER (
|
|
WHERE events.status = 'retired'
|
|
) AS retired,
|
|
COUNT(*) FILTER (
|
|
WHERE events.status = 'suspended'
|
|
) AS suspended,
|
|
COUNT(*) FILTER (
|
|
WHERE events.status = 'decided_by_fa'
|
|
) AS decided_by_fa,
|
|
COUNT(*) FILTER (
|
|
WHERE events.status = 'removed'
|
|
) AS removed
|
|
FROM events
|
|
WHERE (
|
|
events.league_id = sqlc.narg('league_id')
|
|
OR sqlc.narg('league_id') IS NULL
|
|
)
|
|
AND (
|
|
events.sport_id = sqlc.narg('sport_id')
|
|
OR sqlc.narg('sport_id') IS NULL
|
|
);
|
|
-- name: GetTotalEventStatsByInterval :many
|
|
SELECT DATE_TRUNC(sqlc.narg('interval'), start_time)::timestamp AS date,
|
|
COUNT(*) AS event_count,
|
|
COUNT(*) FILTER (
|
|
WHERE events.default_is_active = TRUE
|
|
) AS total_active_events,
|
|
COUNT(*) FILTER (
|
|
WHERE events.default_is_active = FALSE
|
|
) AS total_inactive_events,
|
|
COUNT(*) FILTER (
|
|
WHERE events.default_is_featured = TRUE
|
|
) AS total_featured_events,
|
|
COUNT(DISTINCT league_id) as total_leagues,
|
|
COUNT(*) FILTER (
|
|
WHERE events.status = 'upcoming'
|
|
) AS pending,
|
|
COUNT(*) FILTER (
|
|
WHERE events.status = 'in_play'
|
|
) AS in_play,
|
|
COUNT(*) FILTER (
|
|
WHERE events.status = 'to_be_fixed'
|
|
) AS to_be_fixed,
|
|
COUNT(*) FILTER (
|
|
WHERE events.status = 'ended'
|
|
) AS ended,
|
|
COUNT(*) FILTER (
|
|
WHERE events.status = 'postponed'
|
|
) AS postponed,
|
|
COUNT(*) FILTER (
|
|
WHERE events.status = 'cancelled'
|
|
) AS cancelled,
|
|
COUNT(*) FILTER (
|
|
WHERE events.status = 'walkover'
|
|
) AS walkover,
|
|
COUNT(*) FILTER (
|
|
WHERE events.status = 'interrupted'
|
|
) AS interrupted,
|
|
COUNT(*) FILTER (
|
|
WHERE events.status = 'abandoned'
|
|
) AS abandoned,
|
|
COUNT(*) FILTER (
|
|
WHERE events.status = 'retired'
|
|
) AS retired,
|
|
COUNT(*) FILTER (
|
|
WHERE events.status = 'suspended'
|
|
) AS suspended,
|
|
COUNT(*) FILTER (
|
|
WHERE events.status = 'decided_by_fa'
|
|
) AS decided_by_fa,
|
|
COUNT(*) FILTER (
|
|
WHERE events.status = 'removed'
|
|
) AS removed
|
|
FROM events
|
|
WHERE (
|
|
events.league_id = sqlc.narg('league_id')
|
|
OR sqlc.narg('league_id') IS NULL
|
|
)
|
|
AND (
|
|
events.sport_id = sqlc.narg('sport_id')
|
|
OR sqlc.narg('sport_id') IS NULL
|
|
)
|
|
GROUP BY date
|
|
ORDER BY date; |