- 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.
191 lines
4.7 KiB
SQL
191 lines
4.7 KiB
SQL
-- name: InsertEvent :exec
|
|
INSERT INTO events (
|
|
source_event_id,
|
|
sport_id,
|
|
match_name,
|
|
home_team,
|
|
away_team,
|
|
home_team_id,
|
|
away_team_id,
|
|
home_kit_image,
|
|
away_kit_image,
|
|
league_id,
|
|
league_name,
|
|
start_time,
|
|
is_live,
|
|
status,
|
|
source,
|
|
default_winning_upper_limit
|
|
)
|
|
VALUES (
|
|
$1,
|
|
$2,
|
|
$3,
|
|
$4,
|
|
$5,
|
|
$6,
|
|
$7,
|
|
$8,
|
|
$9,
|
|
$10,
|
|
$11,
|
|
$12,
|
|
$13,
|
|
$14,
|
|
$15,
|
|
$16
|
|
) ON CONFLICT (source_event_id, source) DO
|
|
UPDATE
|
|
SET sport_id = EXCLUDED.sport_id,
|
|
match_name = EXCLUDED.match_name,
|
|
home_team = EXCLUDED.home_team,
|
|
away_team = EXCLUDED.away_team,
|
|
home_team_id = EXCLUDED.home_team_id,
|
|
away_team_id = EXCLUDED.away_team_id,
|
|
home_kit_image = EXCLUDED.home_kit_image,
|
|
away_kit_image = EXCLUDED.away_kit_image,
|
|
league_id = EXCLUDED.league_id,
|
|
league_name = EXCLUDED.league_name,
|
|
start_time = EXCLUDED.start_time,
|
|
score = EXCLUDED.score,
|
|
match_minute = EXCLUDED.match_minute,
|
|
timer_status = EXCLUDED.timer_status,
|
|
added_time = EXCLUDED.added_time,
|
|
match_period = EXCLUDED.match_period,
|
|
is_live = EXCLUDED.is_live,
|
|
source = EXCLUDED.source,
|
|
default_winning_upper_limit = EXCLUDED.default_winning_upper_limit,
|
|
fetched_at = now();
|
|
-- name: ListLiveEvents :many
|
|
SELECT id
|
|
FROM event_detailed
|
|
WHERE is_live = true;
|
|
-- TODO: Figure out how to make this code reusable. SQLC prohibits CTEs within multiple queries
|
|
-- name: GetAllEvents :many
|
|
SELECT *
|
|
FROM event_detailed
|
|
WHERE (
|
|
is_live = sqlc.narg('is_live')
|
|
OR sqlc.narg('is_live') IS NULL
|
|
)
|
|
AND (
|
|
status = sqlc.narg('status')
|
|
OR sqlc.narg('status') IS NULL
|
|
)
|
|
AND (
|
|
league_id = sqlc.narg('league_id')
|
|
OR sqlc.narg('league_id') IS NULL
|
|
)
|
|
AND (
|
|
sport_id = sqlc.narg('sport_id')
|
|
OR sqlc.narg('sport_id') IS NULL
|
|
)
|
|
AND (
|
|
match_name ILIKE '%' || sqlc.narg('query') || '%'
|
|
OR league_name ILIKE '%' || sqlc.narg('query') || '%'
|
|
OR sqlc.narg('query') IS NULL
|
|
)
|
|
AND (
|
|
start_time < sqlc.narg('last_start_time')
|
|
OR sqlc.narg('last_start_time') IS NULL
|
|
)
|
|
AND (
|
|
start_time > sqlc.narg('first_start_time')
|
|
OR sqlc.narg('first_start_time') IS NULL
|
|
)
|
|
AND (
|
|
league_cc = sqlc.narg('country_code')
|
|
OR sqlc.narg('country_code') IS NULL
|
|
)
|
|
AND (
|
|
source = sqlc.narg('source')
|
|
OR sqlc.narg('source') IS NULL
|
|
)
|
|
ORDER BY start_time ASC
|
|
LIMIT sqlc.narg('limit') OFFSET sqlc.narg('offset');
|
|
-- name: GetTotalEvents :one
|
|
SELECT COUNT(*)
|
|
FROM event_detailed
|
|
WHERE (
|
|
is_live = sqlc.narg('is_live')
|
|
OR sqlc.narg('is_live') IS NULL
|
|
)
|
|
AND (
|
|
status = sqlc.narg('status')
|
|
OR sqlc.narg('status') IS NULL
|
|
)
|
|
AND (
|
|
league_id = sqlc.narg('league_id')
|
|
OR sqlc.narg('league_id') IS NULL
|
|
)
|
|
AND (
|
|
sport_id = sqlc.narg('sport_id')
|
|
OR sqlc.narg('sport_id') IS NULL
|
|
)
|
|
AND (
|
|
match_name ILIKE '%' || sqlc.narg('query') || '%'
|
|
OR league_name ILIKE '%' || sqlc.narg('query') || '%'
|
|
OR sqlc.narg('query') IS NULL
|
|
)
|
|
AND (
|
|
start_time < sqlc.narg('last_start_time')
|
|
OR sqlc.narg('last_start_time') IS NULL
|
|
)
|
|
AND (
|
|
start_time > sqlc.narg('first_start_time')
|
|
OR sqlc.narg('first_start_time') IS NULL
|
|
)
|
|
AND (
|
|
league_cc = sqlc.narg('country_code')
|
|
OR sqlc.narg('country_code') IS NULL
|
|
)
|
|
AND (
|
|
source = sqlc.narg('source')
|
|
OR sqlc.narg('source') IS NULL
|
|
);
|
|
|
|
-- name: GetEventByID :one
|
|
SELECT *
|
|
FROM event_detailed
|
|
WHERE id = $1
|
|
LIMIT 1;
|
|
-- name: GetEventBySourceID :one
|
|
SELECT *
|
|
FROM event_detailed
|
|
WHERE source_event_id = $1
|
|
AND source = $2;
|
|
-- name: GetSportAndLeagueIDs :one
|
|
SELECT sport_id,
|
|
league_id
|
|
FROM events
|
|
WHERE id = $1;
|
|
-- name: UpdateMatchResult :exec
|
|
UPDATE events
|
|
SET score = $1,
|
|
status = $2
|
|
WHERE id = $3;
|
|
-- name: IsEventMonitored :one
|
|
SELECT is_monitored
|
|
FROM events
|
|
WHERE id = $1;
|
|
-- name: UpdateEventMonitored :exec
|
|
UPDATE events
|
|
SET is_monitored = $1,
|
|
updated_at = CURRENT_TIMESTAMP
|
|
WHERE id = $2;
|
|
-- name: UpdateGlobalEventSettings :exec
|
|
UPDATE events
|
|
SET default_is_active = COALESCE(sqlc.narg(default_is_active), default_is_active),
|
|
default_is_featured = COALESCE(
|
|
sqlc.narg(default_is_featured),
|
|
default_is_featured
|
|
),
|
|
default_winning_upper_limit = COALESCE(
|
|
sqlc.narg(default_winning_upper_limit),
|
|
default_winning_upper_limit
|
|
),
|
|
updated_at = CURRENT_TIMESTAMP
|
|
WHERE id = $1;
|
|
-- name: DeleteEvent :exec
|
|
DELETE FROM events
|
|
WHERE id = $1; |