mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-29 21:08:12 +00:00
complete rule engine and booking flow
This commit is contained in:
@@ -0,0 +1,321 @@
|
||||
import { MigrationInterface, QueryRunner } from 'typeorm';
|
||||
|
||||
export class AddBookingsRemainingForeignKeys1748800000000 implements MigrationInterface {
|
||||
name = 'AddBookingsRemainingForeignKeys1748800000000';
|
||||
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
// ── freight.bookings: nullable FK cleanup ─────────────────────────────
|
||||
await queryRunner.query(`
|
||||
UPDATE freight.bookings b
|
||||
SET train_id = NULL
|
||||
WHERE b.train_id IS NOT NULL
|
||||
AND NOT EXISTS (SELECT 1 FROM freight.trains t WHERE t.id = b.train_id);
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
UPDATE freight.bookings b
|
||||
SET previous_contract_id = NULL
|
||||
WHERE b.previous_contract_id IS NOT NULL
|
||||
AND NOT EXISTS (SELECT 1 FROM freight.bookings pb WHERE pb.id = b.previous_contract_id);
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
UPDATE freight.bookings b
|
||||
SET consolidation_partner_id = NULL
|
||||
WHERE b.consolidation_partner_id IS NOT NULL
|
||||
AND NOT EXISTS (SELECT 1 FROM freight.bookings pb WHERE pb.id = b.consolidation_partner_id);
|
||||
`);
|
||||
|
||||
// Remove bookings with no matching public.customers row
|
||||
await queryRunner.query(`
|
||||
DELETE FROM freight.booking_cargo_modifier bcm
|
||||
USING freight.bookings b
|
||||
WHERE bcm.booking_id = b.id
|
||||
AND NOT EXISTS (SELECT 1 FROM public.customers c WHERE c.id = b.customer_id);
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
DELETE FROM freight.booking_approval_step bas
|
||||
USING freight.bookings b
|
||||
WHERE bas.booking_id = b.id
|
||||
AND NOT EXISTS (SELECT 1 FROM public.customers c WHERE c.id = b.customer_id);
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
DELETE FROM freight.booking_rate_snapshot brs
|
||||
USING freight.bookings b
|
||||
WHERE brs.booking_id = b.id
|
||||
AND NOT EXISTS (SELECT 1 FROM public.customers c WHERE c.id = b.customer_id);
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
DELETE FROM freight.booking_container bc
|
||||
USING freight.bookings b
|
||||
WHERE bc.booking_id = b.id
|
||||
AND NOT EXISTS (SELECT 1 FROM public.customers c WHERE c.id = b.customer_id);
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
DELETE FROM freight.bookings b
|
||||
WHERE NOT EXISTS (SELECT 1 FROM public.customers c WHERE c.id = b.customer_id);
|
||||
`);
|
||||
|
||||
// ── freight.bookings FKs ────────────────────────────────────────────
|
||||
await queryRunner.query(`
|
||||
DO $$ BEGIN
|
||||
ALTER TABLE freight.bookings
|
||||
ADD CONSTRAINT "FK_bookings_customer_id"
|
||||
FOREIGN KEY (customer_id)
|
||||
REFERENCES public.customers(id)
|
||||
ON DELETE RESTRICT;
|
||||
EXCEPTION
|
||||
WHEN duplicate_object THEN NULL;
|
||||
END $$;
|
||||
`);
|
||||
|
||||
await queryRunner.query(`
|
||||
DO $$ BEGIN
|
||||
ALTER TABLE freight.bookings
|
||||
ADD CONSTRAINT "FK_bookings_train_id"
|
||||
FOREIGN KEY (train_id)
|
||||
REFERENCES freight.trains(id)
|
||||
ON DELETE SET NULL;
|
||||
EXCEPTION
|
||||
WHEN duplicate_object THEN NULL;
|
||||
END $$;
|
||||
`);
|
||||
|
||||
await queryRunner.query(`
|
||||
DO $$ BEGIN
|
||||
ALTER TABLE freight.bookings
|
||||
ADD CONSTRAINT "FK_bookings_previous_contract_id"
|
||||
FOREIGN KEY (previous_contract_id)
|
||||
REFERENCES freight.bookings(id)
|
||||
ON DELETE SET NULL;
|
||||
EXCEPTION
|
||||
WHEN duplicate_object THEN NULL;
|
||||
END $$;
|
||||
`);
|
||||
|
||||
await queryRunner.query(`
|
||||
DO $$ BEGIN
|
||||
ALTER TABLE freight.bookings
|
||||
ADD CONSTRAINT "FK_bookings_consolidation_partner_id"
|
||||
FOREIGN KEY (consolidation_partner_id)
|
||||
REFERENCES freight.bookings(id)
|
||||
ON DELETE SET NULL;
|
||||
EXCEPTION
|
||||
WHEN duplicate_object THEN NULL;
|
||||
END $$;
|
||||
`);
|
||||
|
||||
// ── freight.booking_container ─────────────────────────────────────────
|
||||
await queryRunner.query(`
|
||||
UPDATE freight.booking_container bc
|
||||
SET weight_limit_rule_id = NULL
|
||||
WHERE bc.weight_limit_rule_id IS NOT NULL
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM freight.weight_limit_rules wlr WHERE wlr.id = bc.weight_limit_rule_id
|
||||
);
|
||||
`);
|
||||
|
||||
await queryRunner.query(`
|
||||
DELETE FROM freight.booking_container bc
|
||||
WHERE NOT EXISTS (SELECT 1 FROM freight.container_types ct WHERE ct.id = bc.container_type_id);
|
||||
`);
|
||||
|
||||
await queryRunner.query(`
|
||||
DO $$ BEGIN
|
||||
ALTER TABLE freight.booking_container
|
||||
ADD CONSTRAINT "FK_booking_container_container_type_id"
|
||||
FOREIGN KEY (container_type_id)
|
||||
REFERENCES freight.container_types(id)
|
||||
ON DELETE RESTRICT;
|
||||
EXCEPTION
|
||||
WHEN duplicate_object THEN NULL;
|
||||
END $$;
|
||||
`);
|
||||
|
||||
await queryRunner.query(`
|
||||
DO $$ BEGIN
|
||||
ALTER TABLE freight.booking_container
|
||||
ADD CONSTRAINT "FK_booking_container_weight_limit_rule_id"
|
||||
FOREIGN KEY (weight_limit_rule_id)
|
||||
REFERENCES freight.weight_limit_rules(id)
|
||||
ON DELETE SET NULL;
|
||||
EXCEPTION
|
||||
WHEN duplicate_object THEN NULL;
|
||||
END $$;
|
||||
`);
|
||||
|
||||
// ── freight.booking_rate_snapshot ─────────────────────────────────────
|
||||
await queryRunner.query(`
|
||||
DELETE FROM freight.booking_cargo_modifier bcm
|
||||
USING freight.booking_rate_snapshot brs
|
||||
WHERE bcm.rate_snapshot_id = brs.id
|
||||
AND (
|
||||
NOT EXISTS (SELECT 1 FROM freight.bookings b WHERE b.id = brs.booking_id)
|
||||
OR NOT EXISTS (SELECT 1 FROM freight.rates r WHERE r.id = brs.rate_id)
|
||||
);
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
DELETE FROM freight.booking_rate_snapshot brs
|
||||
WHERE NOT EXISTS (SELECT 1 FROM freight.bookings b WHERE b.id = brs.booking_id)
|
||||
OR NOT EXISTS (SELECT 1 FROM freight.rates r WHERE r.id = brs.rate_id);
|
||||
`);
|
||||
|
||||
await queryRunner.query(`
|
||||
DO $$ BEGIN
|
||||
ALTER TABLE freight.booking_rate_snapshot
|
||||
ADD CONSTRAINT "FK_booking_rate_snapshot_booking_id"
|
||||
FOREIGN KEY (booking_id)
|
||||
REFERENCES freight.bookings(id)
|
||||
ON DELETE CASCADE;
|
||||
EXCEPTION
|
||||
WHEN duplicate_object THEN NULL;
|
||||
END $$;
|
||||
`);
|
||||
|
||||
await queryRunner.query(`
|
||||
DO $$ BEGIN
|
||||
ALTER TABLE freight.booking_rate_snapshot
|
||||
ADD CONSTRAINT "FK_booking_rate_snapshot_rate_id"
|
||||
FOREIGN KEY (rate_id)
|
||||
REFERENCES freight.rates(id)
|
||||
ON DELETE RESTRICT;
|
||||
EXCEPTION
|
||||
WHEN duplicate_object THEN NULL;
|
||||
END $$;
|
||||
`);
|
||||
|
||||
// ── freight.booking_approval_step ─────────────────────────────────────
|
||||
await queryRunner.query(`
|
||||
DELETE FROM freight.booking_approval_step bas
|
||||
WHERE NOT EXISTS (SELECT 1 FROM freight.bookings b WHERE b.id = bas.booking_id)
|
||||
OR NOT EXISTS (SELECT 1 FROM freight.approval_rules ar WHERE ar.id = bas.approval_rule_id);
|
||||
`);
|
||||
|
||||
await queryRunner.query(`
|
||||
DO $$ BEGIN
|
||||
ALTER TABLE freight.booking_approval_step
|
||||
ADD CONSTRAINT "FK_booking_approval_step_booking_id"
|
||||
FOREIGN KEY (booking_id)
|
||||
REFERENCES freight.bookings(id)
|
||||
ON DELETE CASCADE;
|
||||
EXCEPTION
|
||||
WHEN duplicate_object THEN NULL;
|
||||
END $$;
|
||||
`);
|
||||
|
||||
await queryRunner.query(`
|
||||
DO $$ BEGIN
|
||||
ALTER TABLE freight.booking_approval_step
|
||||
ADD CONSTRAINT "FK_booking_approval_step_approval_rule_id"
|
||||
FOREIGN KEY (approval_rule_id)
|
||||
REFERENCES freight.approval_rules(id)
|
||||
ON DELETE RESTRICT;
|
||||
EXCEPTION
|
||||
WHEN duplicate_object THEN NULL;
|
||||
END $$;
|
||||
`);
|
||||
|
||||
// ── freight.booking_cargo_modifier ────────────────────────────────────
|
||||
await queryRunner.query(`
|
||||
DELETE FROM freight.booking_cargo_modifier bcm
|
||||
WHERE NOT EXISTS (SELECT 1 FROM freight.bookings b WHERE b.id = bcm.booking_id)
|
||||
OR NOT EXISTS (SELECT 1 FROM freight.surcharge_types st WHERE st.id = bcm.surcharge_type_id)
|
||||
OR NOT EXISTS (
|
||||
SELECT 1 FROM freight.booking_rate_snapshot brs WHERE brs.id = bcm.rate_snapshot_id
|
||||
);
|
||||
`);
|
||||
|
||||
await queryRunner.query(`
|
||||
DO $$ BEGIN
|
||||
ALTER TABLE freight.booking_cargo_modifier
|
||||
ADD CONSTRAINT "FK_booking_cargo_modifier_booking_id"
|
||||
FOREIGN KEY (booking_id)
|
||||
REFERENCES freight.bookings(id)
|
||||
ON DELETE CASCADE;
|
||||
EXCEPTION
|
||||
WHEN duplicate_object THEN NULL;
|
||||
END $$;
|
||||
`);
|
||||
|
||||
await queryRunner.query(`
|
||||
DO $$ BEGIN
|
||||
ALTER TABLE freight.booking_cargo_modifier
|
||||
ADD CONSTRAINT "FK_booking_cargo_modifier_surcharge_type_id"
|
||||
FOREIGN KEY (surcharge_type_id)
|
||||
REFERENCES freight.surcharge_types(id)
|
||||
ON DELETE RESTRICT;
|
||||
EXCEPTION
|
||||
WHEN duplicate_object THEN NULL;
|
||||
END $$;
|
||||
`);
|
||||
|
||||
await queryRunner.query(`
|
||||
DO $$ BEGIN
|
||||
ALTER TABLE freight.booking_cargo_modifier
|
||||
ADD CONSTRAINT "FK_booking_cargo_modifier_rate_snapshot_id"
|
||||
FOREIGN KEY (rate_snapshot_id)
|
||||
REFERENCES freight.booking_rate_snapshot(id)
|
||||
ON DELETE RESTRICT;
|
||||
EXCEPTION
|
||||
WHEN duplicate_object THEN NULL;
|
||||
END $$;
|
||||
`);
|
||||
}
|
||||
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`
|
||||
ALTER TABLE freight.booking_cargo_modifier
|
||||
DROP CONSTRAINT IF EXISTS "FK_booking_cargo_modifier_rate_snapshot_id";
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
ALTER TABLE freight.booking_cargo_modifier
|
||||
DROP CONSTRAINT IF EXISTS "FK_booking_cargo_modifier_surcharge_type_id";
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
ALTER TABLE freight.booking_cargo_modifier
|
||||
DROP CONSTRAINT IF EXISTS "FK_booking_cargo_modifier_booking_id";
|
||||
`);
|
||||
|
||||
await queryRunner.query(`
|
||||
ALTER TABLE freight.booking_approval_step
|
||||
DROP CONSTRAINT IF EXISTS "FK_booking_approval_step_approval_rule_id";
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
ALTER TABLE freight.booking_approval_step
|
||||
DROP CONSTRAINT IF EXISTS "FK_booking_approval_step_booking_id";
|
||||
`);
|
||||
|
||||
await queryRunner.query(`
|
||||
ALTER TABLE freight.booking_rate_snapshot
|
||||
DROP CONSTRAINT IF EXISTS "FK_booking_rate_snapshot_rate_id";
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
ALTER TABLE freight.booking_rate_snapshot
|
||||
DROP CONSTRAINT IF EXISTS "FK_booking_rate_snapshot_booking_id";
|
||||
`);
|
||||
|
||||
await queryRunner.query(`
|
||||
ALTER TABLE freight.booking_container
|
||||
DROP CONSTRAINT IF EXISTS "FK_booking_container_weight_limit_rule_id";
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
ALTER TABLE freight.booking_container
|
||||
DROP CONSTRAINT IF EXISTS "FK_booking_container_container_type_id";
|
||||
`);
|
||||
|
||||
await queryRunner.query(`
|
||||
ALTER TABLE freight.bookings
|
||||
DROP CONSTRAINT IF EXISTS "FK_bookings_consolidation_partner_id";
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
ALTER TABLE freight.bookings
|
||||
DROP CONSTRAINT IF EXISTS "FK_bookings_previous_contract_id";
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
ALTER TABLE freight.bookings
|
||||
DROP CONSTRAINT IF EXISTS "FK_bookings_train_id";
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
ALTER TABLE freight.bookings
|
||||
DROP CONSTRAINT IF EXISTS "FK_bookings_customer_id";
|
||||
`);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,185 @@
|
||||
import { MigrationInterface, QueryRunner } from 'typeorm';
|
||||
|
||||
export class MoveCustomersToFreightSchema1748900000000 implements MigrationInterface {
|
||||
name = 'MoveCustomersToFreightSchema1748900000000';
|
||||
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`
|
||||
CREATE TABLE IF NOT EXISTS freight.customers (
|
||||
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
||||
user_id UUID NOT NULL,
|
||||
first_name VARCHAR(100) NOT NULL,
|
||||
last_name VARCHAR(100) NOT NULL,
|
||||
email VARCHAR(150) NOT NULL UNIQUE,
|
||||
phone VARCHAR(20) NOT NULL,
|
||||
company_name VARCHAR(200) NOT NULL,
|
||||
company_email VARCHAR(150) NOT NULL,
|
||||
company_phone VARCHAR(20) NOT NULL,
|
||||
company_location VARCHAR(100) NOT NULL,
|
||||
company_address TEXT NOT NULL,
|
||||
customer_type VARCHAR(32),
|
||||
status VARCHAR(32),
|
||||
contact_person_name VARCHAR(100) NOT NULL,
|
||||
contact_person_phone VARCHAR(20) NOT NULL,
|
||||
tin_number VARCHAR(10) NOT NULL UNIQUE,
|
||||
vat_number VARCHAR(50),
|
||||
fan_number VARCHAR(16) NOT NULL UNIQUE,
|
||||
general_manager_name VARCHAR(100) NOT NULL,
|
||||
general_manager_email VARCHAR(150) NOT NULL,
|
||||
general_manager_phone VARCHAR(20) NOT NULL,
|
||||
poa_name VARCHAR(100),
|
||||
poa_phone VARCHAR(20),
|
||||
poa_address TEXT,
|
||||
poa_email VARCHAR(150),
|
||||
poa_location VARCHAR(100),
|
||||
notes TEXT,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||||
deleted_at TIMESTAMPTZ
|
||||
);
|
||||
`);
|
||||
|
||||
await queryRunner.query(`
|
||||
CREATE INDEX IF NOT EXISTS "IDX_freight_customers_email"
|
||||
ON freight.customers (email);
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
CREATE INDEX IF NOT EXISTS "IDX_freight_customers_user_id"
|
||||
ON freight.customers (user_id);
|
||||
`);
|
||||
|
||||
// Copy rows from public.customers when that legacy table exists
|
||||
await queryRunner.query(`
|
||||
DO $$
|
||||
DECLARE
|
||||
has_public boolean;
|
||||
has_user_id boolean;
|
||||
has_userid boolean;
|
||||
BEGIN
|
||||
SELECT EXISTS (
|
||||
SELECT 1 FROM information_schema.tables
|
||||
WHERE table_schema = 'public' AND table_name = 'customers'
|
||||
) INTO has_public;
|
||||
|
||||
IF NOT has_public THEN
|
||||
RETURN;
|
||||
END IF;
|
||||
|
||||
SELECT EXISTS (
|
||||
SELECT 1 FROM information_schema.columns
|
||||
WHERE table_schema = 'public' AND table_name = 'customers' AND column_name = 'user_id'
|
||||
) INTO has_user_id;
|
||||
|
||||
SELECT EXISTS (
|
||||
SELECT 1 FROM information_schema.columns
|
||||
WHERE table_schema = 'public' AND table_name = 'customers' AND column_name = 'userid'
|
||||
) INTO has_userid;
|
||||
|
||||
IF has_user_id THEN
|
||||
INSERT INTO freight.customers (
|
||||
id, user_id, first_name, last_name, email, phone,
|
||||
company_name, company_email, company_phone, company_location, company_address,
|
||||
contact_person_name, contact_person_phone, tin_number, vat_number, fan_number,
|
||||
general_manager_name, general_manager_email, general_manager_phone,
|
||||
poa_name, poa_phone, poa_address, poa_email, poa_location, notes,
|
||||
created_at, updated_at
|
||||
)
|
||||
SELECT
|
||||
id, user_id, first_name, last_name, email, phone,
|
||||
company_name, company_email, company_phone, company_location, company_address,
|
||||
contact_person_name, contact_person_phone, tin_number, vat_number, fan_number,
|
||||
general_manager_name, general_manager_email, general_manager_phone,
|
||||
poa_name, poa_phone, poa_address, poa_email, poa_location, notes,
|
||||
COALESCE(created_at, now()), COALESCE(updated_at, now())
|
||||
FROM public.customers
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
ELSIF has_userid THEN
|
||||
INSERT INTO freight.customers (
|
||||
id, user_id, first_name, last_name, email, phone,
|
||||
company_name, company_email, company_phone, company_location, company_address,
|
||||
contact_person_name, contact_person_phone, tin_number, vat_number, fan_number,
|
||||
general_manager_name, general_manager_email, general_manager_phone,
|
||||
poa_name, poa_phone, poa_address, poa_email, poa_location, notes,
|
||||
created_at, updated_at
|
||||
)
|
||||
SELECT
|
||||
id, userid, firstname, lastname, email, phone,
|
||||
companyname, companyemail, companyphone, companylocation, companyaddress,
|
||||
contactpersonname, contactpersonphone, tinnumber, vatnumber, fannumber,
|
||||
generalmanagername, generalmanageremail, generalmanagerphone,
|
||||
poaname, poaphone, poaaddress, poaemail, poalocation, notes,
|
||||
COALESCE("createdAt", now()), COALESCE("updatedAt", now())
|
||||
FROM public.customers
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
END IF;
|
||||
END $$;
|
||||
`);
|
||||
|
||||
await queryRunner.query(`
|
||||
ALTER TABLE freight.bookings
|
||||
DROP CONSTRAINT IF EXISTS "FK_bookings_customer_id";
|
||||
`);
|
||||
|
||||
await queryRunner.query(`
|
||||
DELETE FROM freight.booking_cargo_modifier bcm
|
||||
USING freight.bookings b
|
||||
WHERE bcm.booking_id = b.id
|
||||
AND NOT EXISTS (SELECT 1 FROM freight.customers c WHERE c.id = b.customer_id);
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
DELETE FROM freight.booking_approval_step bas
|
||||
USING freight.bookings b
|
||||
WHERE bas.booking_id = b.id
|
||||
AND NOT EXISTS (SELECT 1 FROM freight.customers c WHERE c.id = b.customer_id);
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
DELETE FROM freight.booking_rate_snapshot brs
|
||||
USING freight.bookings b
|
||||
WHERE brs.booking_id = b.id
|
||||
AND NOT EXISTS (SELECT 1 FROM freight.customers c WHERE c.id = b.customer_id);
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
DELETE FROM freight.booking_container bc
|
||||
USING freight.bookings b
|
||||
WHERE bc.booking_id = b.id
|
||||
AND NOT EXISTS (SELECT 1 FROM freight.customers c WHERE c.id = b.customer_id);
|
||||
`);
|
||||
await queryRunner.query(`
|
||||
DELETE FROM freight.bookings b
|
||||
WHERE NOT EXISTS (SELECT 1 FROM freight.customers c WHERE c.id = b.customer_id);
|
||||
`);
|
||||
|
||||
await queryRunner.query(`
|
||||
DO $$ BEGIN
|
||||
ALTER TABLE freight.bookings
|
||||
ADD CONSTRAINT "FK_bookings_customer_id"
|
||||
FOREIGN KEY (customer_id)
|
||||
REFERENCES freight.customers(id)
|
||||
ON DELETE RESTRICT;
|
||||
EXCEPTION
|
||||
WHEN duplicate_object THEN NULL;
|
||||
END $$;
|
||||
`);
|
||||
}
|
||||
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`
|
||||
ALTER TABLE freight.bookings
|
||||
DROP CONSTRAINT IF EXISTS "FK_bookings_customer_id";
|
||||
`);
|
||||
|
||||
await queryRunner.query(`
|
||||
DO $$ BEGIN
|
||||
ALTER TABLE freight.bookings
|
||||
ADD CONSTRAINT "FK_bookings_customer_id"
|
||||
FOREIGN KEY (customer_id)
|
||||
REFERENCES public.customers(id)
|
||||
ON DELETE RESTRICT;
|
||||
EXCEPTION
|
||||
WHEN duplicate_object THEN NULL;
|
||||
END $$;
|
||||
`);
|
||||
|
||||
await queryRunner.query(`DROP TABLE IF EXISTS freight.customers CASCADE;`);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user