easyai-ai-gateway/apps/api/migrations/0023_wallet_task_billing_schema.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;