- 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.
171 lines
5.3 KiB
SQL
171 lines
5.3 KiB
SQL
-- name: SaveTenantEventSettings :exec
|
|
INSERT INTO company_event_settings (
|
|
company_id,
|
|
event_id,
|
|
is_active,
|
|
is_featured,
|
|
winning_upper_limit
|
|
)
|
|
VALUES ($1, $2, $3, $4, $5) ON CONFLICT(company_id, event_id) DO
|
|
UPDATE
|
|
SET is_active = EXCLUDED.is_active,
|
|
is_featured = EXCLUDED.is_featured,
|
|
winning_upper_limit = EXCLUDED.winning_upper_limit;
|
|
-- name: GetTotalCompanyEvents :one
|
|
SELECT COUNT(*)
|
|
FROM events e
|
|
LEFT JOIN company_event_settings ces ON e.id = ces.event_id
|
|
AND ces.company_id = $1
|
|
JOIN leagues l ON l.id = e.league_id
|
|
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 (
|
|
e.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 (
|
|
l.country_code = sqlc.narg('country_code')
|
|
OR sqlc.narg('country_code') IS NULL
|
|
)
|
|
AND (
|
|
ces.is_featured = sqlc.narg('is_featured')
|
|
OR e.default_is_featured = sqlc.narg('is_featured')
|
|
OR sqlc.narg('is_featured') IS NULL
|
|
)
|
|
AND (
|
|
ces.is_active = sqlc.narg('is_active')
|
|
OR e.default_is_active = sqlc.narg('is_active')
|
|
OR sqlc.narg('is_active') IS NULL
|
|
)
|
|
AND (
|
|
source = sqlc.narg('source')
|
|
OR sqlc.narg('source') IS NULL
|
|
);
|
|
-- name: GetEventsWithSettings :many
|
|
SELECT e.*,
|
|
ces.company_id,
|
|
COALESCE(ces.is_active, e.default_is_active) AS is_active,
|
|
COALESCE(ces.is_featured, e.default_is_featured) AS is_featured,
|
|
COALESCE(
|
|
ces.winning_upper_limit,
|
|
e.default_winning_upper_limit
|
|
) AS winning_upper_limit,
|
|
ces.updated_at,
|
|
l.country_code as league_cc,
|
|
COALESCE(om.total_outcomes, 0) AS total_outcomes,
|
|
COALESCE(ebs.number_of_bets, 0) AS number_of_bets,
|
|
COALESCE(ebs.total_amount, 0) AS total_amount,
|
|
COALESCE(ebs.avg_bet_amount, 0) AS avg_bet_amount,
|
|
COALESCE(ebs.total_potential_winnings, 0) AS total_potential_winnings
|
|
FROM events e
|
|
LEFT JOIN company_event_settings ces ON e.id = ces.event_id
|
|
AND ces.company_id = $1
|
|
LEFT JOIN event_bet_stats ebs ON ebs.event_id = ewc.id
|
|
JOIN leagues l ON l.id = e.league_id
|
|
LEFT JOIN (
|
|
SELECT event_id,
|
|
SUM(number_of_outcomes) AS total_outcomes
|
|
FROM odds_market
|
|
GROUP BY event_id
|
|
) om ON om.event_id = e.id
|
|
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 (
|
|
e.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 (
|
|
l.country_code = sqlc.narg('country_code')
|
|
OR sqlc.narg('country_code') IS NULL
|
|
)
|
|
AND (
|
|
ces.is_featured = sqlc.narg('is_featured')
|
|
OR e.default_is_featured = sqlc.narg('is_featured')
|
|
OR sqlc.narg('is_featured') IS NULL
|
|
)
|
|
AND (
|
|
ces.is_active = sqlc.narg('is_active')
|
|
OR e.default_is_active = sqlc.narg('is_active')
|
|
OR sqlc.narg('is_active') 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: GetEventWithSettingByID :one
|
|
SELECT e.*,
|
|
ces.company_id,
|
|
COALESCE(ces.is_active, e.default_is_active) AS is_active,
|
|
COALESCE(ces.is_featured, e.default_is_featured) AS is_featured,
|
|
COALESCE(
|
|
ces.winning_upper_limit,
|
|
e.default_winning_upper_limit
|
|
) AS winning_upper_limit,
|
|
ces.updated_at,
|
|
l.country_code as league_cc,
|
|
COALESCE(om.total_outcomes, 0) AS total_outcomes,
|
|
COALESCE(ebs.number_of_bets, 0) AS number_of_bets,
|
|
COALESCE(ebs.total_amount, 0) AS total_amount,
|
|
COALESCE(ebs.avg_bet_amount, 0) AS avg_bet_amount,
|
|
COALESCE(ebs.total_potential_winnings, 0) AS total_potential_winnings
|
|
FROM events e
|
|
LEFT JOIN event_bet_stats ebs ON ebs.event_id = ewc.id
|
|
AND ces.company_id = $2
|
|
LEFT JOIN company_event_settings ces ON e.id = ces.event_id
|
|
JOIN leagues l ON l.id = e.league_id
|
|
LEFT JOIN (
|
|
SELECT event_id,
|
|
SUM(number_of_outcomes) AS total_outcomes
|
|
FROM odds_market
|
|
GROUP BY event_id
|
|
) om ON om.event_id = e.id
|
|
WHERE e.id = $1
|
|
LIMIT 1; |