Compare commits
2 Commits
45a32d7ef0
...
036cb59331
| Author | SHA1 | Date | |
|---|---|---|---|
| 036cb59331 | |||
| dbb6cf58d0 |
@@ -1,5 +1,10 @@
|
||||
package pl.polskalokalnie.config;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.SQLException;
|
||||
import javax.sql.DataSource;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.boot.ApplicationRunner;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
@@ -8,9 +13,32 @@ import org.springframework.jdbc.core.JdbcTemplate;
|
||||
@Configuration
|
||||
public class SchemaFixer {
|
||||
|
||||
private static final Logger log = LoggerFactory.getLogger(SchemaFixer.class);
|
||||
|
||||
/**
|
||||
* Laty schematu pisane sa skladnia PostgreSQL (DO $$, to_regclass, lo_get, split_part...),
|
||||
* bo taka baza dziala na serwerze. W testach schemat tworzy Hibernate z encji na H2,
|
||||
* wiec nie ma czego latac - bez tego warunku kazdy @SpringBootTest wywracal sie przy starcie.
|
||||
*/
|
||||
private static boolean isPostgres(JdbcTemplate jdbcTemplate) {
|
||||
DataSource dataSource = jdbcTemplate.getDataSource();
|
||||
if (dataSource == null) {
|
||||
return false;
|
||||
}
|
||||
try (Connection connection = dataSource.getConnection()) {
|
||||
return "PostgreSQL".equalsIgnoreCase(connection.getMetaData().getDatabaseProductName());
|
||||
} catch (SQLException ex) {
|
||||
log.warn("Nie udalo sie rozpoznac bazy danych, pomijam poprawki schematu: {}", ex.getMessage());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Bean
|
||||
ApplicationRunner ensureViewsCountColumn(JdbcTemplate jdbcTemplate) {
|
||||
return args -> {
|
||||
if (!isPostgres(jdbcTemplate)) {
|
||||
return;
|
||||
}
|
||||
jdbcTemplate.execute(
|
||||
"ALTER TABLE property_listings ADD COLUMN IF NOT EXISTS views_count BIGINT NOT NULL DEFAULT 0"
|
||||
);
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
-- 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
|
||||
Reference in New Issue
Block a user