bd71caa289
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.
75 lines
3.1 KiB
PHP
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,
|
|
));
|
|
}
|
|
}
|