-- name: CreateVirtualGameProvider :one INSERT INTO virtual_game_providers ( provider_id, provider_name, logo_dark, logo_light, enabled ) VALUES ($1, $2, $3, $4, $5) RETURNING id, provider_id, provider_name, logo_dark, logo_light, enabled, created_at, updated_at; -- name: DeleteVirtualGameProvider :exec DELETE FROM virtual_game_providers WHERE provider_id = $1; -- name: DeleteAllVirtualGameProviders :exec DELETE FROM virtual_game_providers; -- name: GetVirtualGameProviderByID :one SELECT id, provider_id, provider_name, logo_dark, logo_light, enabled, created_at, updated_at FROM virtual_game_providers WHERE provider_id = $1; -- name: ListVirtualGameProviders :many SELECT id, provider_id, provider_name, logo_dark, logo_light, enabled, created_at, updated_at FROM virtual_game_providers ORDER BY created_at DESC LIMIT $1 OFFSET $2; -- name: CountVirtualGameProviders :one SELECT COUNT(*) AS total FROM virtual_game_providers; -- name: UpdateVirtualGameProviderEnabled :one UPDATE virtual_game_providers SET enabled = $2, updated_at = CURRENT_TIMESTAMP WHERE provider_id = $1 RETURNING id, provider_id, provider_name, logo_dark, logo_light, enabled, created_at, updated_at; -- name: CreateVirtualGameSession :one INSERT INTO virtual_game_sessions ( user_id, game_id, session_token, currency, status, expires_at ) VALUES ($1, $2, $3, $4, $5, $6) RETURNING id, user_id, game_id, session_token, currency, status, created_at, updated_at, expires_at; -- name: GetVirtualGameSessionByToken :one SELECT id, user_id, game_id, session_token, currency, status, created_at, updated_at, expires_at FROM virtual_game_sessions WHERE session_token = $1; -- name: UpdateVirtualGameSessionStatus :exec UPDATE virtual_game_sessions SET status = $2, updated_at = CURRENT_TIMESTAMP WHERE id = $1; -- name: CreateVirtualGameTransaction :one INSERT INTO virtual_game_transactions ( session_id, user_id, company_id, provider, wallet_id, transaction_type, amount, currency, external_transaction_id, status ) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10) RETURNING id, session_id, user_id, company_id, provider, wallet_id, transaction_type, amount, currency, external_transaction_id, status, created_at, updated_at; -- name: CreateVirtualGameHistory :one INSERT INTO virtual_game_histories ( session_id, user_id, company_id, provider, wallet_id, game_id, transaction_type, amount, currency, external_transaction_id, reference_transaction_id, status ) VALUES ( $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12 ) RETURNING id, session_id, user_id, company_id, provider, wallet_id, game_id, transaction_type, amount, currency, external_transaction_id, reference_transaction_id, status, created_at, updated_at; -- name: GetVirtualGameTransactionByExternalID :one SELECT id, session_id, user_id, wallet_id, transaction_type, amount, currency, external_transaction_id, status, created_at, updated_at FROM virtual_game_transactions WHERE external_transaction_id = $1; -- name: UpdateVirtualGameTransactionStatus :exec UPDATE virtual_game_transactions SET status = $2, updated_at = CURRENT_TIMESTAMP WHERE id = $1; -- name: GetVirtualGameSummaryInRange :many SELECT c.name AS company_name, vg.name AS game_name, COUNT(vgt.id) AS number_of_bets, COALESCE(SUM(vgt.amount), 0) AS total_transaction_sum FROM virtual_game_transactions vgt JOIN virtual_game_sessions vgs ON vgt.session_id = vgs.id JOIN virtual_games vg ON vgs.game_id = vg.id JOIN companies c ON vgt.company_id = c.id WHERE vgt.transaction_type = 'BET' AND vgt.created_at BETWEEN $1 AND $2 GROUP BY c.name, vg.name; -- name: AddFavoriteGame :exec INSERT INTO favorite_games (user_id, game_id, created_at) VALUES ($1, $2, NOW()) ON CONFLICT (user_id, game_id) DO NOTHING; -- name: RemoveFavoriteGame :exec DELETE FROM favorite_games WHERE user_id = $1 AND game_id = $2; -- name: ListFavoriteGames :many SELECT game_id FROM favorite_games WHERE user_id = $1; -- name: CreateVirtualGame :one INSERT INTO virtual_games ( game_id, provider_id, name, category, device_type, volatility, rtp, has_demo, has_free_bets, bets, thumbnail, status ) VALUES ( $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12 ) RETURNING id, game_id, provider_id, name, category, device_type, volatility, rtp, has_demo, has_free_bets, bets, thumbnail, status, created_at, updated_at; -- name: GetAllVirtualGames :many SELECT vg.id, vg.game_id, vg.provider_id, vp.provider_name, vg.name, vg.category, vg.device_type, vg.volatility, vg.rtp, vg.has_demo, vg.has_free_bets, vg.bets, vg.thumbnail, vg.status, vg.created_at, vg.updated_at FROM virtual_games vg JOIN virtual_game_providers vp ON vg.provider_id = vp.provider_id WHERE ( vg.category = sqlc.narg('category') OR sqlc.narg('category') IS NULL ) AND ( name ILIKE '%' || sqlc.narg('name') || '%' OR sqlc.narg('name') IS NULL ) AND ( vg.provider_id = sqlc.narg('provider_id') OR sqlc.narg('provider_id') IS NULL ) ORDER BY vg.created_at DESC LIMIT sqlc.narg('limit') OFFSET sqlc.narg('offset'); -- name: DeleteAllVirtualGames :exec DELETE FROM virtual_games;