import { MigrationInterface, QueryRunner } from 'typeorm'; /** * دفتر المحفظة (docs/17 — I1): * - `balance_after` لتدقيق كل حركة ومطابقتها بالرصيد. * - قيد `balance >= 0` — شبكة أمان أخيرة على مستوى القاعدة: أي مسار كتابة * يتجاوز الخصم الذرّي سيفشل بدل أن يُنتج رصيداً سالباً بصمت. */ export class WalletLedger1721810000000 implements MigrationInterface { public async up(q: QueryRunner): Promise { await q.query( `ALTER TABLE tripz_wallet_txns ADD COLUMN IF NOT EXISTS balance_after numeric(12,3)`, ); await q.query(` DO $$ BEGIN ALTER TABLE tripz_wallets ADD CONSTRAINT tripz_wallets_balance_non_negative CHECK (balance >= 0); EXCEPTION WHEN duplicate_object THEN NULL; END $$; `); } public async down(q: QueryRunner): Promise { await q.query( `ALTER TABLE tripz_wallets DROP CONSTRAINT IF EXISTS tripz_wallets_balance_non_negative`, ); await q.query(`ALTER TABLE tripz_wallet_txns DROP COLUMN IF EXISTS balance_after`); } }