feat(catalog) : M7 — migration table storage (ERP-211) #163

Merged
tristan merged 1 commits from feat/erp-211-migration-storage into develop 2026-06-30 05:59:55 +00:00
Owner

M7 · ERP-211 (1.2) — Migrer la table storage

⚠️ MR empilée sur feat/erp-210-permissions-catalog-storages (#162). À merger après #162 ; rebaser sur develop une fois #162 intégrée.

Création du schéma storage (emplacements de stockage). Pattern miroir de la migration M6 Version20260625110000 (product/storage_type).

Table storage

  • id INT GENERATED BY DEFAULT AS IDENTITY PK
  • site_idsite(id) ON DELETE RESTRICT
  • storage_type_idstorage_type(id) ON DELETE RESTRICT (référentiel M6 réutilisé)
  • numero VARCHAR(50) NOT NULL
  • states JSONB NOT NULLpas de DEFAULT (un '[]' violerait le CHECK ; miroir de product.states, valeur toujours posée par l'app)
  • deleted_at TIMESTAMP(0) + 4 colonnes Timestampable/Blamable
  • CONSTRAINT chk_storage_states_not_empty CHECK (jsonb_array_length(states) >= 1)RG-7.04

Index

  • uq_storage_site_type_numero_active UNIQUE (site_id, storage_type_id, numero) WHERE deleted_at IS NULLRG-7.01 (numéro réutilisable après soft-delete)
  • idx_storage_site, idx_storage_storage_type, idx_storage_deleted_at, idx_storage_created_by, idx_storage_updated_by

Conventions

  • Namespace racine DoctrineMigrations (règle n°11 — FK cross-module). down() symétrique (DROP TABLE storage).
  • COMMENT ON TABLE + COMMENT ON COLUMN sur les 10 colonnes (règle n°12, FR ≤200 car.) ; les 4 standard via ColumnCommentsCatalog::timestampableBlamableComments().

Vérifications

  • make db-reset (chaîne complète de migrations) OK ; migration Version20260629120000 appliquée. down() puis up() symétriques.
  • Contrôle BDD : 10 colonnes commentées + COMMENT ON TABLE, CHECK chk_storage_states_not_empty, index unique partiel + 5 index présents.
  • make php-cs-fixer-allow-risky : 0 fichier à corriger.
  • make test : ColumnsHaveSqlCommentTest vert ; échecs résiduels = flaky JWT connu (changent à chaque run, modules non liés ; tous verts en isolation).

Note

Pas d'entité ORM Storage à ce stade → en TEST, schema:update --force drope la table (sans impact, aucun test ne la référence ; dev/prod via migrations). Sa description rejouable sera ajoutée à ColumnCommentsCatalog au ticket entité (comme product).

## M7 · ERP-211 (1.2) — Migrer la table `storage` > ⚠️ **MR empilée** sur `feat/erp-210-permissions-catalog-storages` (#162). À merger après #162 ; rebaser sur `develop` une fois #162 intégrée. Création du schéma `storage` (emplacements de stockage). Pattern miroir de la migration M6 `Version20260625110000` (`product`/`storage_type`). ### Table `storage` - `id INT GENERATED BY DEFAULT AS IDENTITY` PK - `site_id` → `site(id)` **ON DELETE RESTRICT** - `storage_type_id` → `storage_type(id)` **ON DELETE RESTRICT** (référentiel M6 réutilisé) - `numero VARCHAR(50) NOT NULL` - `states JSONB NOT NULL` — **pas de DEFAULT** (un `'[]'` violerait le CHECK ; miroir de `product.states`, valeur toujours posée par l'app) - `deleted_at TIMESTAMP(0)` + 4 colonnes Timestampable/Blamable - `CONSTRAINT chk_storage_states_not_empty CHECK (jsonb_array_length(states) >= 1)` — **RG-7.04** ### Index - `uq_storage_site_type_numero_active` UNIQUE `(site_id, storage_type_id, numero) WHERE deleted_at IS NULL` — **RG-7.01** (numéro réutilisable après soft-delete) - `idx_storage_site`, `idx_storage_storage_type`, `idx_storage_deleted_at`, `idx_storage_created_by`, `idx_storage_updated_by` ### Conventions - Namespace racine `DoctrineMigrations` (règle n°11 — FK cross-module). `down()` symétrique (`DROP TABLE storage`). - `COMMENT ON TABLE` + `COMMENT ON COLUMN` sur les 10 colonnes (règle n°12, FR ≤200 car.) ; les 4 standard via `ColumnCommentsCatalog::timestampableBlamableComments()`. ### Vérifications - `make db-reset` (chaîne complète de migrations) OK ; migration `Version20260629120000` appliquée. `down()` puis `up()` symétriques. - Contrôle BDD : 10 colonnes commentées + `COMMENT ON TABLE`, CHECK `chk_storage_states_not_empty`, index unique partiel + 5 index présents. - `make php-cs-fixer-allow-risky` : 0 fichier à corriger. - `make test` : `ColumnsHaveSqlCommentTest` vert ; échecs résiduels = flaky JWT connu (changent à chaque run, modules non liés ; tous verts en isolation). ### Note Pas d'entité ORM `Storage` à ce stade → en TEST, `schema:update --force` drope la table (sans impact, aucun test ne la référence ; dev/prod via migrations). Sa description rejouable sera ajoutée à `ColumnCommentsCatalog` au ticket entité (comme `product`).
tristan added the type/featbackdbM7-Stockage labels 2026-06-29 13:46:42 +00:00
tristan changed target branch from feat/erp-210-permissions-catalog-storages to develop 2026-06-30 05:59:53 +00:00
tristan added 1 commit 2026-06-30 05:59:53 +00:00
tristan merged commit dc9ffc55e9 into develop 2026-06-30 05:59:55 +00:00
Sign in to join this conversation.