Co-authored-by: renee-png <262607627+renee-png@users.noreply.github.com>
This commit is contained in:
gpt-engineer-app[bot]
2026-04-18 03:35:02 +00:00
co-authored by renee-png
parent 05e1d30361
commit 2545249219
@@ -0,0 +1,95 @@
-- Remove clients & contacts created in the last 24 hours (the bulk-imported batch).
-- Cascading clean-up of dependent rows that don't have ON DELETE CASCADE.
-- 1. Identify target sets
WITH del_clients AS (
SELECT id FROM public.clients WHERE created_at >= now() - interval '24 hours'
),
del_contacts AS (
SELECT id FROM public.contacts WHERE created_at >= now() - interval '24 hours'
),
-- Homeowners belonging to those clients
del_homeowners AS (
SELECT id FROM public.homeowners WHERE client_id IN (SELECT id FROM del_clients)
),
-- Cases belonging to those clients
del_cases AS (
SELECT id FROM public.cases WHERE client_id IN (SELECT id FROM del_clients)
),
-- Collections under those cases / homeowners
del_collections AS (
SELECT id FROM public.collections
WHERE case_id IN (SELECT id FROM del_cases)
OR homeowner_id IN (SELECT id FROM del_homeowners)
),
-- Invoices belonging to those clients / cases
del_invoices AS (
SELECT id FROM public.invoices
WHERE client_id IN (SELECT id FROM del_clients)
OR case_id IN (SELECT id FROM del_cases)
)
-- Materialise into temp tables for reuse across statements
SELECT id INTO TEMP TABLE _del_clients FROM del_clients;
WITH t AS (SELECT id FROM public.contacts WHERE created_at >= now() - interval '24 hours')
SELECT id INTO TEMP TABLE _del_contacts FROM t;
WITH t AS (SELECT id FROM public.homeowners WHERE client_id IN (SELECT id FROM _del_clients))
SELECT id INTO TEMP TABLE _del_homeowners FROM t;
WITH t AS (SELECT id FROM public.cases WHERE client_id IN (SELECT id FROM _del_clients))
SELECT id INTO TEMP TABLE _del_cases FROM t;
WITH t AS (
SELECT id FROM public.collections
WHERE case_id IN (SELECT id FROM _del_cases)
OR homeowner_id IN (SELECT id FROM _del_homeowners)
)
SELECT id INTO TEMP TABLE _del_collections FROM t;
WITH t AS (
SELECT id FROM public.invoices
WHERE client_id IN (SELECT id FROM _del_clients)
OR case_id IN (SELECT id FROM _del_cases)
)
SELECT id INTO TEMP TABLE _del_invoices FROM t;
-- 2. Delete dependents bottom-up
-- Collections sub-data
DELETE FROM public.payment_plan_installments WHERE plan_id IN (SELECT id FROM public.payment_plans WHERE collection_id IN (SELECT id FROM _del_collections));
DELETE FROM public.payment_plans WHERE collection_id IN (SELECT id FROM _del_collections);
DELETE FROM public.collection_payment_allocations WHERE collection_id IN (SELECT id FROM _del_collections);
DELETE FROM public.collection_ledger_entries WHERE collection_id IN (SELECT id FROM _del_collections);
DELETE FROM public.collection_tasks WHERE collection_id IN (SELECT id FROM _del_collections);
DELETE FROM public.collections WHERE id IN (SELECT id FROM _del_collections);
-- Invoice sub-data
DELETE FROM public.invoice_payments WHERE invoice_id IN (SELECT id FROM _del_invoices);
DELETE FROM public.invoice_line_items WHERE invoice_id IN (SELECT id FROM _del_invoices);
UPDATE public.expenses SET invoice_id = NULL WHERE invoice_id IN (SELECT id FROM _del_invoices);
DELETE FROM public.invoices WHERE id IN (SELECT id FROM _del_invoices);
-- Case sub-data
DELETE FROM public.expenses WHERE case_id IN (SELECT id FROM _del_cases);
DELETE FROM public.call_logs WHERE case_id IN (SELECT id FROM _del_cases);
DELETE FROM public.documents WHERE case_id IN (SELECT id FROM _del_cases);
DELETE FROM public.document_folders WHERE case_id IN (SELECT id FROM _del_cases);
DELETE FROM public.case_field_values WHERE case_id IN (SELECT id FROM _del_cases);
DELETE FROM public.case_contacts WHERE case_id IN (SELECT id FROM _del_cases);
DELETE FROM public.status_updates WHERE case_id IN (SELECT id FROM _del_cases);
DELETE FROM public.events WHERE case_id IN (SELECT id FROM _del_cases);
DELETE FROM public.tasks WHERE case_id IN (SELECT id FROM _del_cases);
DELETE FROM public.comments WHERE case_id IN (SELECT id FROM _del_cases);
DELETE FROM public.cases WHERE id IN (SELECT id FROM _del_cases);
-- Homeowner sub-data
DELETE FROM public.call_logs WHERE homeowner_id IN (SELECT id FROM _del_homeowners);
DELETE FROM public.homeowners WHERE id IN (SELECT id FROM _del_homeowners);
-- Contact sub-data
DELETE FROM public.case_contacts WHERE contact_id IN (SELECT id FROM _del_contacts);
DELETE FROM public.client_contacts WHERE contact_id IN (SELECT id FROM _del_contacts);
DELETE FROM public.call_logs WHERE contact_id IN (SELECT id FROM _del_contacts);
DELETE FROM public.contacts WHERE id IN (SELECT id FROM _del_contacts);
-- Client sub-data
DELETE FROM public.client_contacts WHERE client_id IN (SELECT id FROM _del_clients);
DELETE FROM public.events WHERE client_id IN (SELECT id FROM _del_clients);
DELETE FROM public.clients WHERE id IN (SELECT id FROM _del_clients);
DROP TABLE _del_clients, _del_contacts, _del_homeowners, _del_cases, _del_collections, _del_invoices;