-- 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, wallet_id, transaction_type, amount, currency, external_transaction_id, status ) VALUES ( $1, $2, $3, $4, $5, $6, $7, $8 ) RETURNING id, session_id, user_id, 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, 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 ) RETURNING id, session_id, user_id, 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 vg.name AS game_name, COUNT(vgh.id) AS number_of_bets, COALESCE(SUM(vgh.amount), 0) AS total_transaction_sum FROM virtual_game_histories vgh JOIN virtual_games vg ON vgh.game_id = vg.id WHERE vgh.transaction_type = 'BET' AND vgh.created_at BETWEEN $1 AND $2 GROUP BY vg.name;