fix(commercial) : down() orphan-only + index FK referentiels (review ERP-53)
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 1m29s
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Successful in 1m15s

This commit is contained in:
Matthieu
2026-06-01 12:08:17 +02:00
parent 8d0a9a67ef
commit 034301ceaf
+19 -3
View File
@@ -84,10 +84,18 @@ final class Version20260601000000 extends AbstractMigration
$this->addSql('DROP TABLE payment_delay'); $this->addSql('DROP TABLE payment_delay');
$this->addSql('DROP TABLE tva_mode'); $this->addSql('DROP TABLE tva_mode');
// Retire uniquement les 4 types seedes par cette migration. Les autres // Retire uniquement les 4 types seedes par cette migration ET restes
// types eventuels (CRUD futur) sont preserves. // orphelins (aucune `category` ne les reference). Sans la clause
// NOT EXISTS, le DELETE casse sur la FK RESTRICT category.category_type_id
// des qu'une categorie pointe sur l'un d'eux. Symetrique du
// `ON CONFLICT (code) DO NOTHING` du up() : on ne defait que ce qu'on a
// reellement cree et qui n'est pas reutilise.
$this->addSql(<<<'SQL' $this->addSql(<<<'SQL'
DELETE FROM category_type WHERE code IN ('DISTRIBUTEUR', 'COURTIER', 'SECTEUR', 'AUTRE') DELETE FROM category_type
WHERE code IN ('DISTRIBUTEUR', 'COURTIER', 'SECTEUR', 'AUTRE')
AND NOT EXISTS (
SELECT 1 FROM category c WHERE c.category_type_id = category_type.id
)
SQL); SQL);
} }
@@ -220,6 +228,14 @@ final class Version20260601000000 extends AbstractMigration
$this->addSql('CREATE INDEX idx_client_created_by ON client (created_by)'); $this->addSql('CREATE INDEX idx_client_created_by ON client (created_by)');
$this->addSql('CREATE INDEX idx_client_updated_by ON client (updated_by)'); $this->addSql('CREATE INDEX idx_client_updated_by ON client (updated_by)');
// Index sur les FK des referentiels comptables — coherence avec les autres
// FK deja indexees ci-dessus (Postgres n'indexe pas automatiquement les
// colonnes portant une FOREIGN KEY).
$this->addSql('CREATE INDEX idx_client_tva_mode_id ON client (tva_mode_id)');
$this->addSql('CREATE INDEX idx_client_payment_delay_id ON client (payment_delay_id)');
$this->addSql('CREATE INDEX idx_client_payment_type_id ON client (payment_type_id)');
$this->addSql('CREATE INDEX idx_client_bank_id ON client (bank_id)');
// Unicite metier partielle (Q4) : nom de societe insensible a la casse, // Unicite metier partielle (Q4) : nom de societe insensible a la casse,
// parmi les non-archives ET non soft-deletes uniquement. Pas d'index // parmi les non-archives ET non soft-deletes uniquement. Pas d'index
// unique sur siren ni email. // unique sur siren ni email.