- 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.
470 lines
15 KiB
Go
470 lines
15 KiB
Go
// Code generated by sqlc. DO NOT EDIT.
|
|
// versions:
|
|
// sqlc v1.29.0
|
|
// source: events_with_settings.sql
|
|
|
|
package dbgen
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/jackc/pgx/v5/pgtype"
|
|
)
|
|
|
|
const GetEventWithSettingByID = `-- name: GetEventWithSettingByID :one
|
|
SELECT e.id, e.source_event_id, e.sport_id, e.match_name, e.home_team, e.away_team, e.home_team_id, e.away_team_id, e.home_kit_image, e.away_kit_image, e.league_id, e.league_name, e.start_time, e.score, e.match_minute, e.timer_status, e.added_time, e.match_period, e.is_live, e.status, e.fetched_at, e.updated_at, e.source, e.default_is_active, e.default_is_featured, e.default_winning_upper_limit, e.is_monitored,
|
|
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
|
|
`
|
|
|
|
type GetEventWithSettingByIDParams struct {
|
|
ID int64 `json:"id"`
|
|
CompanyID int64 `json:"company_id"`
|
|
}
|
|
|
|
type GetEventWithSettingByIDRow struct {
|
|
ID int64 `json:"id"`
|
|
SourceEventID string `json:"source_event_id"`
|
|
SportID int32 `json:"sport_id"`
|
|
MatchName string `json:"match_name"`
|
|
HomeTeam string `json:"home_team"`
|
|
AwayTeam string `json:"away_team"`
|
|
HomeTeamID int64 `json:"home_team_id"`
|
|
AwayTeamID int64 `json:"away_team_id"`
|
|
HomeKitImage string `json:"home_kit_image"`
|
|
AwayKitImage string `json:"away_kit_image"`
|
|
LeagueID int64 `json:"league_id"`
|
|
LeagueName string `json:"league_name"`
|
|
StartTime pgtype.Timestamp `json:"start_time"`
|
|
Score pgtype.Text `json:"score"`
|
|
MatchMinute pgtype.Int4 `json:"match_minute"`
|
|
TimerStatus pgtype.Text `json:"timer_status"`
|
|
AddedTime pgtype.Int4 `json:"added_time"`
|
|
MatchPeriod pgtype.Int4 `json:"match_period"`
|
|
IsLive bool `json:"is_live"`
|
|
Status string `json:"status"`
|
|
FetchedAt pgtype.Timestamp `json:"fetched_at"`
|
|
UpdatedAt pgtype.Timestamp `json:"updated_at"`
|
|
Source string `json:"source"`
|
|
DefaultIsActive bool `json:"default_is_active"`
|
|
DefaultIsFeatured bool `json:"default_is_featured"`
|
|
DefaultWinningUpperLimit int64 `json:"default_winning_upper_limit"`
|
|
IsMonitored bool `json:"is_monitored"`
|
|
CompanyID pgtype.Int8 `json:"company_id"`
|
|
IsActive bool `json:"is_active"`
|
|
IsFeatured bool `json:"is_featured"`
|
|
WinningUpperLimit int64 `json:"winning_upper_limit"`
|
|
UpdatedAt_2 pgtype.Timestamp `json:"updated_at_2"`
|
|
LeagueCc pgtype.Text `json:"league_cc"`
|
|
TotalOutcomes int64 `json:"total_outcomes"`
|
|
NumberOfBets int64 `json:"number_of_bets"`
|
|
TotalAmount int64 `json:"total_amount"`
|
|
AvgBetAmount float64 `json:"avg_bet_amount"`
|
|
TotalPotentialWinnings int64 `json:"total_potential_winnings"`
|
|
}
|
|
|
|
func (q *Queries) GetEventWithSettingByID(ctx context.Context, arg GetEventWithSettingByIDParams) (GetEventWithSettingByIDRow, error) {
|
|
row := q.db.QueryRow(ctx, GetEventWithSettingByID, arg.ID, arg.CompanyID)
|
|
var i GetEventWithSettingByIDRow
|
|
err := row.Scan(
|
|
&i.ID,
|
|
&i.SourceEventID,
|
|
&i.SportID,
|
|
&i.MatchName,
|
|
&i.HomeTeam,
|
|
&i.AwayTeam,
|
|
&i.HomeTeamID,
|
|
&i.AwayTeamID,
|
|
&i.HomeKitImage,
|
|
&i.AwayKitImage,
|
|
&i.LeagueID,
|
|
&i.LeagueName,
|
|
&i.StartTime,
|
|
&i.Score,
|
|
&i.MatchMinute,
|
|
&i.TimerStatus,
|
|
&i.AddedTime,
|
|
&i.MatchPeriod,
|
|
&i.IsLive,
|
|
&i.Status,
|
|
&i.FetchedAt,
|
|
&i.UpdatedAt,
|
|
&i.Source,
|
|
&i.DefaultIsActive,
|
|
&i.DefaultIsFeatured,
|
|
&i.DefaultWinningUpperLimit,
|
|
&i.IsMonitored,
|
|
&i.CompanyID,
|
|
&i.IsActive,
|
|
&i.IsFeatured,
|
|
&i.WinningUpperLimit,
|
|
&i.UpdatedAt_2,
|
|
&i.LeagueCc,
|
|
&i.TotalOutcomes,
|
|
&i.NumberOfBets,
|
|
&i.TotalAmount,
|
|
&i.AvgBetAmount,
|
|
&i.TotalPotentialWinnings,
|
|
)
|
|
return i, err
|
|
}
|
|
|
|
const GetEventsWithSettings = `-- name: GetEventsWithSettings :many
|
|
SELECT e.id, e.source_event_id, e.sport_id, e.match_name, e.home_team, e.away_team, e.home_team_id, e.away_team_id, e.home_kit_image, e.away_kit_image, e.league_id, e.league_name, e.start_time, e.score, e.match_minute, e.timer_status, e.added_time, e.match_period, e.is_live, e.status, e.fetched_at, e.updated_at, e.source, e.default_is_active, e.default_is_featured, e.default_winning_upper_limit, e.is_monitored,
|
|
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 = $2
|
|
OR $2 IS NULL
|
|
)
|
|
AND (
|
|
status = $3
|
|
OR $3 IS NULL
|
|
)
|
|
AND(
|
|
league_id = $4
|
|
OR $4 IS NULL
|
|
)
|
|
AND (
|
|
e.sport_id = $5
|
|
OR $5 IS NULL
|
|
)
|
|
AND (
|
|
match_name ILIKE '%' || $6 || '%'
|
|
OR league_name ILIKE '%' || $6 || '%'
|
|
OR $6 IS NULL
|
|
)
|
|
AND (
|
|
start_time < $7
|
|
OR $7 IS NULL
|
|
)
|
|
AND (
|
|
start_time > $8
|
|
OR $8 IS NULL
|
|
)
|
|
AND (
|
|
l.country_code = $9
|
|
OR $9 IS NULL
|
|
)
|
|
AND (
|
|
ces.is_featured = $10
|
|
OR e.default_is_featured = $10
|
|
OR $10 IS NULL
|
|
)
|
|
AND (
|
|
ces.is_active = $11
|
|
OR e.default_is_active = $11
|
|
OR $11 IS NULL
|
|
)
|
|
AND (
|
|
source = $12
|
|
OR $12 IS NULL
|
|
)
|
|
ORDER BY start_time ASC
|
|
LIMIT $14 OFFSET $13
|
|
`
|
|
|
|
type GetEventsWithSettingsParams struct {
|
|
CompanyID int64 `json:"company_id"`
|
|
IsLive pgtype.Bool `json:"is_live"`
|
|
Status pgtype.Text `json:"status"`
|
|
LeagueID pgtype.Int8 `json:"league_id"`
|
|
SportID pgtype.Int4 `json:"sport_id"`
|
|
Query pgtype.Text `json:"query"`
|
|
LastStartTime pgtype.Timestamp `json:"last_start_time"`
|
|
FirstStartTime pgtype.Timestamp `json:"first_start_time"`
|
|
CountryCode pgtype.Text `json:"country_code"`
|
|
IsFeatured pgtype.Bool `json:"is_featured"`
|
|
IsActive pgtype.Bool `json:"is_active"`
|
|
Source pgtype.Text `json:"source"`
|
|
Offset pgtype.Int4 `json:"offset"`
|
|
Limit pgtype.Int4 `json:"limit"`
|
|
}
|
|
|
|
type GetEventsWithSettingsRow struct {
|
|
ID int64 `json:"id"`
|
|
SourceEventID string `json:"source_event_id"`
|
|
SportID int32 `json:"sport_id"`
|
|
MatchName string `json:"match_name"`
|
|
HomeTeam string `json:"home_team"`
|
|
AwayTeam string `json:"away_team"`
|
|
HomeTeamID int64 `json:"home_team_id"`
|
|
AwayTeamID int64 `json:"away_team_id"`
|
|
HomeKitImage string `json:"home_kit_image"`
|
|
AwayKitImage string `json:"away_kit_image"`
|
|
LeagueID int64 `json:"league_id"`
|
|
LeagueName string `json:"league_name"`
|
|
StartTime pgtype.Timestamp `json:"start_time"`
|
|
Score pgtype.Text `json:"score"`
|
|
MatchMinute pgtype.Int4 `json:"match_minute"`
|
|
TimerStatus pgtype.Text `json:"timer_status"`
|
|
AddedTime pgtype.Int4 `json:"added_time"`
|
|
MatchPeriod pgtype.Int4 `json:"match_period"`
|
|
IsLive bool `json:"is_live"`
|
|
Status string `json:"status"`
|
|
FetchedAt pgtype.Timestamp `json:"fetched_at"`
|
|
UpdatedAt pgtype.Timestamp `json:"updated_at"`
|
|
Source string `json:"source"`
|
|
DefaultIsActive bool `json:"default_is_active"`
|
|
DefaultIsFeatured bool `json:"default_is_featured"`
|
|
DefaultWinningUpperLimit int64 `json:"default_winning_upper_limit"`
|
|
IsMonitored bool `json:"is_monitored"`
|
|
CompanyID pgtype.Int8 `json:"company_id"`
|
|
IsActive bool `json:"is_active"`
|
|
IsFeatured bool `json:"is_featured"`
|
|
WinningUpperLimit int64 `json:"winning_upper_limit"`
|
|
UpdatedAt_2 pgtype.Timestamp `json:"updated_at_2"`
|
|
LeagueCc pgtype.Text `json:"league_cc"`
|
|
TotalOutcomes int64 `json:"total_outcomes"`
|
|
NumberOfBets int64 `json:"number_of_bets"`
|
|
TotalAmount int64 `json:"total_amount"`
|
|
AvgBetAmount float64 `json:"avg_bet_amount"`
|
|
TotalPotentialWinnings int64 `json:"total_potential_winnings"`
|
|
}
|
|
|
|
func (q *Queries) GetEventsWithSettings(ctx context.Context, arg GetEventsWithSettingsParams) ([]GetEventsWithSettingsRow, error) {
|
|
rows, err := q.db.Query(ctx, GetEventsWithSettings,
|
|
arg.CompanyID,
|
|
arg.IsLive,
|
|
arg.Status,
|
|
arg.LeagueID,
|
|
arg.SportID,
|
|
arg.Query,
|
|
arg.LastStartTime,
|
|
arg.FirstStartTime,
|
|
arg.CountryCode,
|
|
arg.IsFeatured,
|
|
arg.IsActive,
|
|
arg.Source,
|
|
arg.Offset,
|
|
arg.Limit,
|
|
)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer rows.Close()
|
|
var items []GetEventsWithSettingsRow
|
|
for rows.Next() {
|
|
var i GetEventsWithSettingsRow
|
|
if err := rows.Scan(
|
|
&i.ID,
|
|
&i.SourceEventID,
|
|
&i.SportID,
|
|
&i.MatchName,
|
|
&i.HomeTeam,
|
|
&i.AwayTeam,
|
|
&i.HomeTeamID,
|
|
&i.AwayTeamID,
|
|
&i.HomeKitImage,
|
|
&i.AwayKitImage,
|
|
&i.LeagueID,
|
|
&i.LeagueName,
|
|
&i.StartTime,
|
|
&i.Score,
|
|
&i.MatchMinute,
|
|
&i.TimerStatus,
|
|
&i.AddedTime,
|
|
&i.MatchPeriod,
|
|
&i.IsLive,
|
|
&i.Status,
|
|
&i.FetchedAt,
|
|
&i.UpdatedAt,
|
|
&i.Source,
|
|
&i.DefaultIsActive,
|
|
&i.DefaultIsFeatured,
|
|
&i.DefaultWinningUpperLimit,
|
|
&i.IsMonitored,
|
|
&i.CompanyID,
|
|
&i.IsActive,
|
|
&i.IsFeatured,
|
|
&i.WinningUpperLimit,
|
|
&i.UpdatedAt_2,
|
|
&i.LeagueCc,
|
|
&i.TotalOutcomes,
|
|
&i.NumberOfBets,
|
|
&i.TotalAmount,
|
|
&i.AvgBetAmount,
|
|
&i.TotalPotentialWinnings,
|
|
); err != nil {
|
|
return nil, err
|
|
}
|
|
items = append(items, i)
|
|
}
|
|
if err := rows.Err(); err != nil {
|
|
return nil, err
|
|
}
|
|
return items, nil
|
|
}
|
|
|
|
const GetTotalCompanyEvents = `-- 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 = $2
|
|
OR $2 IS NULL
|
|
)
|
|
AND (
|
|
status = $3
|
|
OR $3 IS NULL
|
|
)
|
|
AND(
|
|
league_id = $4
|
|
OR $4 IS NULL
|
|
)
|
|
AND (
|
|
e.sport_id = $5
|
|
OR $5 IS NULL
|
|
)
|
|
AND (
|
|
match_name ILIKE '%' || $6 || '%'
|
|
OR league_name ILIKE '%' || $6 || '%'
|
|
OR $6 IS NULL
|
|
)
|
|
AND (
|
|
start_time < $7
|
|
OR $7 IS NULL
|
|
)
|
|
AND (
|
|
start_time > $8
|
|
OR $8 IS NULL
|
|
)
|
|
AND (
|
|
l.country_code = $9
|
|
OR $9 IS NULL
|
|
)
|
|
AND (
|
|
ces.is_featured = $10
|
|
OR e.default_is_featured = $10
|
|
OR $10 IS NULL
|
|
)
|
|
AND (
|
|
ces.is_active = $11
|
|
OR e.default_is_active = $11
|
|
OR $11 IS NULL
|
|
)
|
|
AND (
|
|
source = $12
|
|
OR $12 IS NULL
|
|
)
|
|
`
|
|
|
|
type GetTotalCompanyEventsParams struct {
|
|
CompanyID int64 `json:"company_id"`
|
|
IsLive pgtype.Bool `json:"is_live"`
|
|
Status pgtype.Text `json:"status"`
|
|
LeagueID pgtype.Int8 `json:"league_id"`
|
|
SportID pgtype.Int4 `json:"sport_id"`
|
|
Query pgtype.Text `json:"query"`
|
|
LastStartTime pgtype.Timestamp `json:"last_start_time"`
|
|
FirstStartTime pgtype.Timestamp `json:"first_start_time"`
|
|
CountryCode pgtype.Text `json:"country_code"`
|
|
IsFeatured pgtype.Bool `json:"is_featured"`
|
|
IsActive pgtype.Bool `json:"is_active"`
|
|
Source pgtype.Text `json:"source"`
|
|
}
|
|
|
|
func (q *Queries) GetTotalCompanyEvents(ctx context.Context, arg GetTotalCompanyEventsParams) (int64, error) {
|
|
row := q.db.QueryRow(ctx, GetTotalCompanyEvents,
|
|
arg.CompanyID,
|
|
arg.IsLive,
|
|
arg.Status,
|
|
arg.LeagueID,
|
|
arg.SportID,
|
|
arg.Query,
|
|
arg.LastStartTime,
|
|
arg.FirstStartTime,
|
|
arg.CountryCode,
|
|
arg.IsFeatured,
|
|
arg.IsActive,
|
|
arg.Source,
|
|
)
|
|
var count int64
|
|
err := row.Scan(&count)
|
|
return count, err
|
|
}
|
|
|
|
const SaveTenantEventSettings = `-- 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
|
|
`
|
|
|
|
type SaveTenantEventSettingsParams struct {
|
|
CompanyID int64 `json:"company_id"`
|
|
EventID int64 `json:"event_id"`
|
|
IsActive pgtype.Bool `json:"is_active"`
|
|
IsFeatured pgtype.Bool `json:"is_featured"`
|
|
WinningUpperLimit pgtype.Int8 `json:"winning_upper_limit"`
|
|
}
|
|
|
|
func (q *Queries) SaveTenantEventSettings(ctx context.Context, arg SaveTenantEventSettingsParams) error {
|
|
_, err := q.db.Exec(ctx, SaveTenantEventSettings,
|
|
arg.CompanyID,
|
|
arg.EventID,
|
|
arg.IsActive,
|
|
arg.IsFeatured,
|
|
arg.WinningUpperLimit,
|
|
)
|
|
return err
|
|
}
|