import { Migration } from '@mikro-orm/migrations'; export class Migration20260218114512_orderCalc extends Migration { override async up(): Promise { 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 { 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;`); } }