mirror of
https://github.com/Such-Software/wownerogue.git
synced 2026-10-25 01:58:33 +02:00
feat: productionize paid modes and PvP capture
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
\set ON_ERROR_STOP on
|
||||
\pset pager off
|
||||
|
||||
BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ READ ONLY;
|
||||
|
||||
SELECT current_database() AS database,
|
||||
COUNT(*) AS applied_migrations,
|
||||
MAX(filename) AS latest_migration
|
||||
FROM schema_migrations;
|
||||
|
||||
WITH audit(category, row_count, atomic_amount) AS (
|
||||
SELECT 'payout_nonterminal', COUNT(*), COALESCE(SUM(amount), 0)::numeric
|
||||
FROM payouts
|
||||
WHERE status IS DISTINCT FROM 'completed'
|
||||
UNION ALL
|
||||
SELECT 'payout_completed_missing_tx', COUNT(*), COALESCE(SUM(amount), 0)::numeric
|
||||
FROM payouts
|
||||
WHERE status = 'completed' AND NULLIF(BTRIM(COALESCE(tx_hash, '')), '') IS NULL
|
||||
UNION ALL
|
||||
SELECT 'refund_unsettled', COUNT(*), COALESCE(SUM(amount), 0)::numeric
|
||||
FROM payment_refunds
|
||||
WHERE status IS DISTINCT FROM 'completed'
|
||||
UNION ALL
|
||||
SELECT 'solo_orphan', COUNT(*), 0::numeric
|
||||
FROM games
|
||||
WHERE status IS NULL OR status NOT IN ('won', 'lost', 'expired')
|
||||
UNION ALL
|
||||
SELECT 'match_orphan', COUNT(*), COALESCE(SUM(payout_liability_amount_atomic), 0)::numeric
|
||||
FROM matches
|
||||
WHERE status IS NULL OR status NOT IN ('finished', 'cancelled')
|
||||
UNION ALL
|
||||
SELECT 'match_queue_outstanding', COUNT(*), COALESCE(SUM(escrow_value_atomic), 0)::numeric
|
||||
FROM match_queue_entries
|
||||
WHERE status IS NULL OR status NOT IN ('consumed', 'cancelled')
|
||||
UNION ALL
|
||||
SELECT 'solo_liability_without_payout', COUNT(*),
|
||||
COALESCE(SUM(CASE
|
||||
WHEN treasure_found THEN payout_treasure_amount
|
||||
ELSE payout_escape_amount
|
||||
END), 0)::numeric
|
||||
FROM games g
|
||||
WHERE g.status = 'won'
|
||||
AND g.payout_eligible = TRUE
|
||||
AND NOT EXISTS (SELECT 1 FROM payouts p WHERE p.game_id = g.id)
|
||||
UNION ALL
|
||||
SELECT 'match_liability_without_payout', COUNT(*),
|
||||
COALESCE(SUM(m.payout_liability_amount_atomic), 0)::numeric
|
||||
FROM matches m
|
||||
WHERE m.economy = 'crypto_race'
|
||||
AND m.status = 'finished'
|
||||
AND m.winner_user_id IS NOT NULL
|
||||
AND m.payout_liability_accepted_at IS NOT NULL
|
||||
AND NOT EXISTS (SELECT 1 FROM payouts p WHERE p.match_id = m.id)
|
||||
UNION ALL
|
||||
SELECT 'late_payment_manual_review', COUNT(*), COALESCE(SUM(observed_amount), 0)::numeric
|
||||
FROM payment_late_reviews
|
||||
WHERE status IS NULL OR status NOT IN ('resolved', 'ignored')
|
||||
)
|
||||
SELECT category, row_count, atomic_amount
|
||||
FROM audit
|
||||
ORDER BY category;
|
||||
|
||||
WITH ledger AS (
|
||||
SELECT COUNT(*) = 40
|
||||
AND MAX(filename) = '040_paid_match_entropy_precommit.sql' AS valid
|
||||
FROM schema_migrations
|
||||
), audit(row_count) AS (
|
||||
SELECT COUNT(*) FROM payouts WHERE status IS DISTINCT FROM 'completed'
|
||||
UNION ALL
|
||||
SELECT COUNT(*) FROM payouts
|
||||
WHERE status = 'completed' AND NULLIF(BTRIM(COALESCE(tx_hash, '')), '') IS NULL
|
||||
UNION ALL
|
||||
SELECT COUNT(*) FROM payment_refunds
|
||||
WHERE status IS DISTINCT FROM 'completed'
|
||||
UNION ALL
|
||||
SELECT COUNT(*) FROM games WHERE status IS NULL OR status NOT IN ('won', 'lost', 'expired')
|
||||
UNION ALL
|
||||
SELECT COUNT(*) FROM matches WHERE status IS NULL OR status NOT IN ('finished', 'cancelled')
|
||||
UNION ALL
|
||||
SELECT COUNT(*) FROM match_queue_entries WHERE status IS NULL OR status NOT IN ('consumed', 'cancelled')
|
||||
UNION ALL
|
||||
SELECT COUNT(*) FROM games g
|
||||
WHERE g.status = 'won' AND g.payout_eligible = TRUE
|
||||
AND NOT EXISTS (SELECT 1 FROM payouts p WHERE p.game_id = g.id)
|
||||
UNION ALL
|
||||
SELECT COUNT(*) FROM matches m
|
||||
WHERE m.economy = 'crypto_race' AND m.status = 'finished'
|
||||
AND m.winner_user_id IS NOT NULL
|
||||
AND m.payout_liability_accepted_at IS NOT NULL
|
||||
AND NOT EXISTS (SELECT 1 FROM payouts p WHERE p.match_id = m.id)
|
||||
UNION ALL
|
||||
SELECT COUNT(*) FROM payment_late_reviews WHERE status IS NULL OR status NOT IN ('resolved', 'ignored')
|
||||
)
|
||||
SELECT ((SELECT valid FROM ledger) AND COALESCE(SUM(row_count), 0) = 0) AS financial_audit_clean FROM audit \gset
|
||||
|
||||
\if :financial_audit_clean
|
||||
\echo 'PASS: no dispatchable/ambiguous financial state or orphaned gameplay state'
|
||||
\else
|
||||
\echo 'FAIL: reconcile every nonzero category before any payout-capable boot'
|
||||
\quit 3
|
||||
\endif
|
||||
|
||||
ROLLBACK;
|
||||
Reference in New Issue
Block a user