feat(technique) : migration schema repertoire prestataires (ERP-132) #90
Reference in New Issue
Block a user
Delete Branch "feature/ERP-132-migrer-schema-bdd-m3"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
ERP-132 — Migrer le schéma BDD M3 (provider + sous-collections)
Contenu
Crée tout le schéma Postgres du répertoire prestataires (1 migration, namespace racine
DoctrineMigrations— FK cross-module user/category/site + référentiels comptables M1).Tables (9) :
provider: company_name + bloc Comptabilité (siren/account_number/n_tva + FK tva_mode/payment_delay/payment_type/bank ON DELETE RESTRICT) + is_archived/archived_at/deleted_at + Timestampable/Blamable. Pas d'onglet Information (≠ supplier).provider_category(RG-3.09),provider_site(sites du prestataire — RG-3.03, nouveau vs supplier +idx_provider_site_sitepour le cloisonnement par site).provider_contact(CHECKchk_provider_contact_name: ≥1 champ parmi first_name/last_name/phone_primary/email),provider_address(sans address_type/bennes/triage),provider_rib.provider_address_site(RG-3.05),provider_address_contact,provider_address_category.uq_provider_company_name_active(LOWER(company_name) WHERE non archivé/non supprimé — RG-3.10) + index FK.COMMENT ON COLUMN/TABLEinline sur toutes les colonnes (règle ABSOLUE n°12).Décisions
schema:update --forcedu setup test droppe les tables non mappées → les référencer dans le catalogue ferait planterapp:apply-column-comments. Catalogue + lignedbal:run-sql uq_providerdifférés à ERP-133, exactement comme supplier (ERP-86 après ERP-85).Tests
make db-reset(dev + test-db-setup)make test— 589 tests,ColumnsHaveSqlCommentTestvertidx_provider_site_siteprésent, 0 colonne sans COMMENTdown()/up()OKmake php-cs-fixer-allow-risky(0 fichier)Revue de code ERP-132 (migration schéma prestataires). Migration DDL pure, très propre : miroir fidèle de supplier (M2) et alignée au spec § 3.1 ligne à ligne. Aucun bug de correctness trouvé (longueurs, FK ON DELETE, index partiel, CHECK contact, ordre down(), COMMENT exhaustifs — tout est conforme). 1 seul commentaire, non bloquant : un rappel forward-looking pour la stack (ERP-133).
@@ -0,0 +158,4 @@// les non-archives ET non soft-deletes uniquement (RG-3.10). Pas d index// unique sur siren ni email.$this->addSql(<<<'SQL'CREATE UNIQUE INDEX uq_provider_company_name_activeNon bloquant — rappel pour ERP-133 (entités) : ne pas oublier de réappliquer cet index partiel dans le setup de la test-db, sinon les tests 409/RG-3.10 ne testeront rien.
Cet index unique partiel (
WHERE is_archived = FALSE AND deleted_at IS NULL, expressionLOWER(...)) est possédé par la seule migration —schema:update --forcene sait pas le régénérer depuis le mapping ORM (même situation queuq_category_name_active, doc de l'entitéCategory).Conséquence à anticiper : dès qu'ERP-133 ajoutera les entités
Provider*, leschema:update --forcedutest-db-setuprecréera la tableprovidersans cet index. Si la lignedbal:run-sqln'est pas ajoutée au makefile (comme tu l'annonces dans le docblock § COMMENT et dansColumnCommentsCatalog), alors en base de test il n'y aura aucune contrainte d'unicité → leProviderProcessorpourra détecter le doublon applicativement, mais tout test qui s'attend à un 409 garanti par la BDD (RG-3.10) passera au vert sans rien valider (faux positif silencieux).Le précédent supplier (ERP-86 après ERP-85) a bien ajouté la ligne
dbal:run-sql uq_supplier_company_name_active+ l'entrée catalogue : à répliquer tel quel pouruq_provider_company_name_activeau ticket entités. Rien à changer dans cette MR — c'est juste le maillon à ne pas perdre dans la stack.Côté DDL pure : RAS. La migration colle au spec § 3.1 ligne à ligne (colonnes, longueurs, FK ON DELETE, prédicat de l'index partiel, CHECK
chk_provider_contact_name) et reflète fidèlementsupplier. Ordre desDROPdansdown()correct,COMMENT ON COLUMNsur 100 % des colonnes.