Files
negareh-api/database/migrations/Migration20260218114512_orderCalc.ts
T
2026-02-18 15:16:45 +03:30

45 lines
1.2 KiB
TypeScript

import { Migration } from '@mikro-orm/migrations';
export class Migration20260218114512_orderCalc extends Migration {
override async up(): Promise<void> {
this.addSql(`
CREATE OR REPLACE FUNCTION update_order_paid_amount()
RETURNS TRIGGER AS $$
BEGIN
UPDATE orders o
SET paid_amount = (
SELECT COALESCE(SUM(p.amount), 0)
FROM payments p
WHERE p.order_id = COALESCE(NEW.order_id, OLD.order_id)
AND p.status = 'Paid'
)
WHERE o.id = COALESCE(NEW.order_id, OLD.order_id);
RETURN NULL;
END;
$$ LANGUAGE plpgsql;
`);
this.addSql(`
CREATE TRIGGER trg_update_order_paid_amount
AFTER INSERT OR UPDATE OR DELETE
ON payments
FOR EACH ROW
EXECUTE FUNCTION update_order_paid_amount();
`);
this.addSql(`
CREATE INDEX idx_payments_order_status
ON payments(order_id, status);
`);
}
override async down(): Promise<void> {
this.addSql(`DROP TRIGGER IF EXISTS trg_update_order_paid_amount ON payments;`);
this.addSql(`DROP FUNCTION IF EXISTS update_order_paid_amount;`);
this.addSql(`DROP INDEX IF EXISTS idx_payments_order_status;`);
}
}