a948eed9b6
Auto Tag Develop / tag (push) Successful in 7s
Ticket Lesstime : ERP-67 — `[Convention SQL / Backend / L]` ## Objectif Documenter toutes les colonnes BDD via `COMMENT ON COLUMN` (visible dans DBeaver / DataGrip / pgAdmin sans lire le code Doctrine) et verrouiller la convention par un garde-fou de test architecture. ## Changements ### Convention (CLAUDE.md + rules) - `CLAUDE.md` regle ABSOLUE n°12 : toute migration creant ou modifiant une colonne doit poser un `COMMENT ON COLUMN` (FR, ≤ 200 caracteres). - `.claude/rules/backend.md` § Migrations Doctrine : exemples + helper standardise pour les 4 colonnes du `TimestampableBlamableTrait`. ### Garde-fou architecture - `tests/Architecture/ColumnsHaveSqlCommentTest` : echoue si une colonne `public` n'a pas de `col_description` (hors `doctrine_migration_versions` et `fake_site_aware_entity` fixture de test). - Whitelist metier `EXCLUDED_TABLES` volontairement vide. ### Retrofit des tables existantes - Migration `Version20260528120000` : 64 `COMMENT ON TABLE/COLUMN` sur les 11 tables metier (audit_log, category, category_type, permission, role, role_permission, site, user, user_permission, user_role, user_site). - Source unique de verite : `src/Shared/Infrastructure/Database/ColumnCommentsCatalog.php`. - Commande `app:apply-column-comments` (Module/Core/Infrastructure/Console) : rejoue le catalogue apres `doctrine:schema:update --force` (sinon l'ORM drop les commentaires absents du mapping PHP). Branchee dans `makefile test-db-setup` et `.gitea/workflows/pull-request.yml`. ## Validation - `make db-reset` puis `make test` : 312 tests verts, 0 regression. - `make php-cs-fixer-allow-risky` : 0 fix. - Couverture : 53/53 colonnes documentees sur `starseed` et `starseed_test`. ## Test plan - [ ] `make db-reset` passe sans erreur. - [ ] `make test` passe ; `ColumnsHaveSqlCommentTest` vert sur DB de test. - [ ] Verifier dans DBeaver / pgAdmin que les commentaires apparaissent sur les colonnes de `category`, `user`, `audit_log`. - [ ] Verifier que le workflow CI Gitea (`pull-request.yml`) passe. ## A noter pour la suite La convention `options: ['comment' => '...']` sur chaque `#[ORM\Column]` reste recommandee pour les nouvelles entites — Doctrine genere alors automatiquement le `COMMENT ON COLUMN` dans la migration et `schema:update` le preserve sans avoir a rejouer le catalogue. A discuter si on veut en faire une regle forte. --------- Co-authored-by: admin malio <malio@yuno.malio.fr> Co-authored-by: Matthieu <contact@malio.fr> Co-authored-by: Matthieu <mtholot19@gmail.com> Reviewed-on: #24 Co-authored-by: THOLOT DECHENE Matthieu <matthieu@yuno.malio.fr> Co-committed-by: THOLOT DECHENE Matthieu <matthieu@yuno.malio.fr>
67 lines
2.3 KiB
PHP
67 lines
2.3 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace DoctrineMigrations;
|
|
|
|
use App\Shared\Infrastructure\Database\ColumnCommentsCatalog;
|
|
use Doctrine\DBAL\Schema\Schema;
|
|
use Doctrine\Migrations\AbstractMigration;
|
|
|
|
/**
|
|
* ERP-67 — Retrofit `COMMENT ON COLUMN` / `COMMENT ON TABLE` sur toutes les
|
|
* tables metier existantes.
|
|
*
|
|
* Postgres stocke la description dans `pg_description`. Les outils d'admin
|
|
* (DBeaver, DataGrip, pgAdmin) l'affichent automatiquement, ce qui evite de
|
|
* remonter au code Doctrine pour comprendre la semantique d'une colonne.
|
|
*
|
|
* Source unique : `ColumnCommentsCatalog::comments()`. Le meme catalogue est
|
|
* rejoue par `app:apply-column-comments` apres `doctrine:schema:update --force`
|
|
* en environnement de test (Doctrine ORM ne conservant pas les commentaires
|
|
* absents du mapping PHP).
|
|
*
|
|
* Convention :
|
|
* - Description en francais, ≤ 200 caracteres.
|
|
* - Semantique du champ + contraintes / lien RG si pertinent.
|
|
*
|
|
* Migration placee au namespace racine `DoctrineMigrations` (regle ABSOLUE
|
|
* Starseed n°11) car elle touche plusieurs modules. Les futures migrations
|
|
* applicatives devront poser leur propre `COMMENT ON COLUMN` au moment de
|
|
* creer leurs colonnes (cf. regle ABSOLUE n°12 + .claude/rules/backend.md).
|
|
*/
|
|
final class Version20260528120000 extends AbstractMigration
|
|
{
|
|
public function getDescription(): string
|
|
{
|
|
return 'ERP-67 : retrofit COMMENT ON COLUMN/TABLE sur toutes les tables metier existantes.';
|
|
}
|
|
|
|
public function up(Schema $schema): void
|
|
{
|
|
foreach (ColumnCommentsCatalog::toSqlStatements() as $sql) {
|
|
$this->addSql($sql);
|
|
}
|
|
}
|
|
|
|
public function down(Schema $schema): void
|
|
{
|
|
foreach (ColumnCommentsCatalog::comments() as $table => $entries) {
|
|
$quotedTable = '"'.str_replace('"', '""', $table).'"';
|
|
foreach ($entries as $column => $_) {
|
|
if ('_table' === $column) {
|
|
$this->addSql(sprintf('COMMENT ON TABLE %s IS NULL', $quotedTable));
|
|
|
|
continue;
|
|
}
|
|
|
|
$this->addSql(sprintf(
|
|
'COMMENT ON COLUMN %s.%s IS NULL',
|
|
$quotedTable,
|
|
'"'.str_replace('"', '""', $column).'"',
|
|
));
|
|
}
|
|
}
|
|
}
|
|
}
|