Files
polskalokalnie/scripts/cleanup-campaigns.sql
debian 036cb59331
Deploy Polska Lokalnie / deploy (push) Successful in 11s
Skrypt czyszczacy kampanie marketingowe
Usuwa wszystkie kampanie i ich kolejki odbiorcow, zeby stare kampanie
zawieszone w statusie SENDING nie ruszyly po wdrozeniu wysylki.
Leady, zgody marketingowe i grupy docelowe zostaja nietkniete.

Domyslnie proba na sucho (ROLLBACK), zapis tylko z -v apply=1 -
tak samo jak scripts/cleanup-test-data.sql.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-23 12:12:23 +02:00

54 lines
2.3 KiB
PL/PgSQL

-- Czyszczenie kampanii marketingowych: usuwa WSZYSTKIE kampanie razem z ich kolejkami
-- odbiorcow (tabele campaigns i campaign_recipients).
--
-- Po co: do 2026-09-23 zaden proces nie wysylal kampanii z kolejki - kampania wchodzila
-- w status "wysylanie" i tak zostawala. Po wdrozeniu wysylki (CampaignSender) takie stare
-- kampanie ruszylyby naprawde. Ten skrypt czysci tabele przed pierwsza prawdziwa wysylka.
--
-- Domyslnie PROBA NA SUCHO: wszystko dzieje sie w jednej transakcji, skrypt wypisuje stan
-- przed i po, po czym robi ROLLBACK. Zapis nastepuje tylko z -v apply=1.
--
-- docker exec -i polskalokalnie-db-1 psql -U polskalokalnie -d polskalokalnie < scripts/cleanup-campaigns.sql
-- docker exec -i polskalokalnie-db-1 psql -U polskalokalnie -d polskalokalnie -v apply=1 < scripts/cleanup-campaigns.sql
--
-- NIE rusza: leadow ani ich zgod marketingowych, grup docelowych, zapytan o reklame,
-- konfiguracji SMTP/SMS. Znika wylacznie historia kampanii i ich kolejki wysylkowe.
\set ON_ERROR_STOP on
\if :{?apply}
\else
\set apply 0
\endif
BEGIN;
\echo '=== Stan przed czyszczeniem ==='
SELECT 'kampanie' AS co, count(*) AS ile FROM campaigns
UNION ALL SELECT 'pozycje w kolejkach', count(*) FROM campaign_recipients
UNION ALL SELECT 'leady (zostaja)', count(*) FROM leads
UNION ALL SELECT 'grupy docelowe (zostaja)', count(*) FROM target_groups;
\echo '=== Kampanie wedlug statusu (te w SENDING/SCHEDULED ruszylyby po wdrozeniu wysylki) ==='
SELECT status, count(*) AS ile FROM campaigns GROUP BY status ORDER BY status;
\echo '=== Ile wiadomosci czeka w kolejkach ==='
SELECT r.status, count(*) AS ile FROM campaign_recipients r GROUP BY r.status ORDER BY r.status;
-- Najpierw kolejki (maja campaign_id), potem same kampanie.
DELETE FROM campaign_recipients;
DELETE FROM campaigns;
\echo '=== Stan po czyszczeniu ==='
SELECT 'kampanie' AS co, count(*) AS ile FROM campaigns
UNION ALL SELECT 'pozycje w kolejkach', count(*) FROM campaign_recipients
UNION ALL SELECT 'leady (nietkniete)', count(*) FROM leads
UNION ALL SELECT 'grupy docelowe (nietkniete)', count(*) FROM target_groups;
\if :apply
COMMIT;
\echo '>>> ZAPISANO ZMIANY (COMMIT) - kampanie i kolejki usuniete'
\else
ROLLBACK;
\echo '>>> PROBA NA SUCHO - nic nie zostalo zmienione (ROLLBACK). Zapis: -v apply=1'
\endif