feat(catalog) : ERP-198 — migration schéma M6 (storage_type, product, jonctions, type PRODUIT) #149
Reference in New Issue
Block a user
Delete Branch "feat/erp-198-migration-schema-m6-produit"
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-198 (1.2) — Migration schéma M6 produit
Crée le schéma BDD du module Catalogue produit (M6) en une migration au namespace racine
DoctrineMigrations(FK cross-module user/site/category — cf. précédent M5).Tables créées (
Version20260625110000.php)storage_type— référentiel provisoire des types de stockage (codeVARCHAR(40) uniqueuq_storage_type_code,label).storage_type_site— jonction M2M storage_type ↔ site (CASCADE/CASCADE).product— table principale :codeVARCHAR(50),name,statesJSONB (≥1 via CHECKchk_product_states_not_empty),manufactured/contains_molassesBOOLEAN,category_idFK NOT NULL RESTRICT,deleted_at+ 4 colonnes Timestampable/Blamable.uq_product_code_active(unicité globale parmi les actifs, RG-6.01).category_id,deleted_at,created_by,updated_by.product_site/product_storage_type— jonctions M2M (CASCADE côté product, RESTRICT côté référentiel).Seed
category_typePRODUIT (ON CONFLICT DO NOTHING) — miroir CategoryTypeFixtures (l'ajout aux fixtures + catégories PRODUIT suit en ERP-201).Garde-fous (règle ABSOLUE n°12)
COMMENT ON COLUMNsur chaque colonne (FR ≤ 200 car.) +COMMENT ON TABLE; 4 colonnes standard viaColumnCommentsCatalog::timestampableBlamableComments().schema:updatesur la BDD de test uniquement, sans impact (précédent M5 ERP-182). MirrorColumnCommentsCatalogreporté à ERP-199.Vérifications
make db-reset✅ (tables + COMMENT + index partiel + CHECK + seed vérifiés)make test✅ (garde-fousColumnsHaveSqlCommentTest,EntitiesAreTimestampableBlamableTest,CollectionsArePaginatedTestverts ; échec isoléUploadedDocumentApiTest= permissionvar/uploads, hors sujet)make php-cs-fixer-allow-risky✅ (0 fichier corrigé)Review back — ERP-198 (migration schéma M6), read-only.
Périmètre :
storage_type(+ jonction site),product(+ jonctions), seed type PRODUIT.Vérifié conforme :
COMMENT ON COLUMNsur chaque colonne créée +COMMENT ON TABLE(garde-fouColumnsHaveSqlCommentTestvert).ColumnCommentsCatalog(piège connu évité — sinontest-db-setupdrope les COMMENT).uq_product_code_activecréé ET lignedbal:run-sqldumakefile(test-db-setup) alignée (piège connu évité).chk_product_states_not_empty(RG-6.02), 4 colonnes Timestampable/Blamable via le helper centralisé, namespace racineDoctrineMigrations, colonnes en minuscules.Verdict : ✅ aucun retour obligatoire.
Review M6 « Produit » — relecture croisée (couche données + couche application) sur le diff cumulé
develop…HEAD.Verdict : 0 bloquant, 0 important.
Assert\*en FR.priority:1+#[IsGranted('catalog.products.view')], mêmes filtres que la liste — conforme.Nits relevés (non bloquants) :
product.states:DEFAULT '[]'::jsonbcontredisait leCHECK (jsonb_array_length(states) >= 1)(default mort, jamais atteignable) → corrigé (commit30e7839).ProductExportControllerTest: letearDownréutilisait la constante des category-types (TEST_CATEGORY_TYPE_PREFIX) pour purger des storage-types → constante dédiéeTEST_STORAGE_PREFIX(commit30e7839).Site(cross-module) du controller utilisé seulement dans un commentaire@var; DQLp.id != :idau lieu de<>: cosmétiques, laissés tels quels.?pagination=falserenvoyant unarray: conforme (pattern établiClientProvider/SupplierProvider, échappatoire documentée pour alimenter les selects).Consolidée dans #154 : la pile M6 a été reciblée sur
developen une seule MR pour un CI unique. Commits intégralement inclus dans #154 — fermée sans merge individuel.Pull request closed