49 lines
1.6 KiB
SQL
49 lines
1.6 KiB
SQL
ALTER TABLE gateway_wallet_accounts
|
|
ADD COLUMN IF NOT EXISTS total_recharged numeric NOT NULL DEFAULT 0,
|
|
ADD COLUMN IF NOT EXISTS total_spent numeric NOT NULL DEFAULT 0;
|
|
|
|
ALTER TABLE gateway_wallet_transactions
|
|
ADD COLUMN IF NOT EXISTS account_id uuid REFERENCES gateway_wallet_accounts(id) ON DELETE CASCADE,
|
|
ADD COLUMN IF NOT EXISTS direction text,
|
|
ADD COLUMN IF NOT EXISTS balance_before numeric,
|
|
ADD COLUMN IF NOT EXISTS idempotency_key text;
|
|
|
|
DO $$
|
|
BEGIN
|
|
IF EXISTS (
|
|
SELECT 1
|
|
FROM information_schema.columns
|
|
WHERE table_name = 'gateway_wallet_transactions'
|
|
AND column_name = 'wallet_account_id'
|
|
) THEN
|
|
EXECUTE 'UPDATE gateway_wallet_transactions SET account_id = wallet_account_id WHERE account_id IS NULL';
|
|
END IF;
|
|
END $$;
|
|
|
|
UPDATE gateway_wallet_transactions
|
|
SET direction = CASE
|
|
WHEN transaction_type IN ('recharge', 'refund', 'credit') THEN 'credit'
|
|
ELSE 'debit'
|
|
END
|
|
WHERE direction IS NULL;
|
|
|
|
UPDATE gateway_wallet_transactions
|
|
SET balance_before = COALESCE(balance_after, 0) + CASE
|
|
WHEN direction = 'debit' THEN COALESCE(amount, 0)
|
|
ELSE -COALESCE(amount, 0)
|
|
END
|
|
WHERE balance_before IS NULL;
|
|
|
|
ALTER TABLE gateway_wallet_transactions
|
|
ALTER COLUMN direction SET DEFAULT 'debit',
|
|
ALTER COLUMN direction SET NOT NULL,
|
|
ALTER COLUMN balance_before SET DEFAULT 0,
|
|
ALTER COLUMN balance_before SET NOT NULL;
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_gateway_wallet_transactions_account
|
|
ON gateway_wallet_transactions(account_id, created_at DESC);
|
|
|
|
CREATE UNIQUE INDEX IF NOT EXISTS uniq_gateway_wallet_tx_idempotency
|
|
ON gateway_wallet_transactions(account_id, idempotency_key)
|
|
WHERE idempotency_key IS NOT NULL;
|