Files
Starseed/migrations/Version20260622100000.php
T
tristan bd71caa289
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Successful in 47s
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 5m13s
fix(front+back) : suppression de la categorie du bloc adresse prestataire (ERP-193)
La categorie portee par l'ADRESSE du prestataire (M2M provider_address_category)
est retiree de toutes les couches : champ + prop du bloc adresse, type/payload/
mapping front, entite ProviderAddress (M2M, Assert\Count, validateCategoryType,
accesseurs), fixtures, contexte de serialisation. Nouvelle migration de drop de la
table (namespace racine pour l'ordre post-creation). La categorie du PRESTATAIRE
lui-meme (provider_category, repertoire, filtre, formulaire principal) est conservee.
2026-06-22 09:44:44 +02:00

75 lines
3.1 KiB
PHP

<?php
declare(strict_types=1);
namespace DoctrineMigrations;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
/**
* ERP-193 (retours metier M3) : suppression du champ « Categorie » du BLOC ADRESSE
* prestataire (ProviderAddress) — fonctionnalite jugee inutile cote metier. Seule
* la categorie du PRESTATAIRE lui-meme (table provider_category) est conservee.
*
* Drop de la table de jointure M2M provider_address_category (creee par
* Version20260612100000). Migration au namespace racine DoctrineMigrations (et non
* modulaire Technique) : elle DEPEND d une table creee au namespace racine et doit
* donc s executer APRES sur base vide. Le tri cross-namespace de Doctrine Migrations
* est alphabetique par FQCN (cf. regle ABSOLUE n°11) : une migration modulaire
* « App\... » trierait AVANT « DoctrineMigrations\... » et passerait le DROP avant
* le CREATE (table recreee a la fin). Rester en racine garantit l ordre par version.
*/
final class Version20260622100000 extends AbstractMigration
{
public function getDescription(): string
{
return 'ERP-193 : suppression de la categorie du bloc adresse prestataire (drop provider_address_category).';
}
public function up(Schema $schema): void
{
$this->addSql('DROP TABLE IF EXISTS provider_address_category');
}
public function down(Schema $schema): void
{
$this->addSql(<<<'SQL'
CREATE TABLE provider_address_category (
provider_address_id INT NOT NULL,
category_id INT NOT NULL,
PRIMARY KEY (provider_address_id, category_id),
CONSTRAINT fk_provider_address_category_address
FOREIGN KEY (provider_address_id) REFERENCES provider_address (id) ON DELETE CASCADE,
CONSTRAINT fk_provider_address_category_category
FOREIGN KEY (category_id) REFERENCES category (id) ON DELETE RESTRICT
)
SQL);
$this->comment('provider_address_category', '_table', 'Jointure M2M provider_address <-> category — categories d adresse de type PRESTATAIRE (RG-3.09).');
$this->comment('provider_address_category', 'provider_address_id', 'FK -> provider_address.id, ON DELETE CASCADE — adresse concernee.');
$this->comment('provider_address_category', 'category_id', 'FK -> category.id, ON DELETE RESTRICT — categorie d adresse de type PRESTATAIRE (RG-3.09).');
}
/**
* Pose un COMMENT ON TABLE/COLUMN en dollar-quoting Postgres ($_$...$_$)
* pour eviter tout echappement d'apostrophes dans les descriptions.
*/
private function comment(string $table, string $column, string $description): void
{
$quotedTable = '"'.str_replace('"', '""', $table).'"';
if ('_table' === $column) {
$this->addSql(sprintf('COMMENT ON TABLE %s IS $_$%s$_$', $quotedTable, $description));
return;
}
$this->addSql(sprintf(
'COMMENT ON COLUMN %s.%s IS $_$%s$_$',
$quotedTable,
'"'.str_replace('"', '""', $column).'"',
$description,
));
}
}