| Numéro du ticket | Titre du ticket | |------------------|-----------------| | | | ## Description de la PR ## Modification du .env ## Check list - [x] Pas de régression - [x] TU/TI/TF rédigée - [x] TU/TI/TF OK - [ ] CHANGELOG modifié Co-authored-by: Matthieu <mtholot19@gmail.com> Reviewed-on: MALIO-DEV/Coltura#8 Co-authored-by: tristan <tristan@yuno.malio.fr> Co-committed-by: tristan <tristan@yuno.malio.fr>
This commit was merged in pull request #8.
This commit is contained in:
72
migrations/Version20260417120000.php
Normal file
72
migrations/Version20260417120000.php
Normal file
@@ -0,0 +1,72 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace DoctrineMigrations;
|
||||
|
||||
use Doctrine\DBAL\Schema\Schema;
|
||||
use Doctrine\Migrations\AbstractMigration;
|
||||
|
||||
/**
|
||||
* Module Sites - Ticket 1/4 : brique fondatrice de donnees.
|
||||
*
|
||||
* Cree la table `site` qui porte les etablissements physiques de l'instance
|
||||
* Coltura. La table est creee inconditionnellement : meme si SitesModule est
|
||||
* desactive dans `config/modules.php`, la structure DB existe (pas de
|
||||
* dependance dure depuis Core, mais pas de coin d'ombre schema non plus).
|
||||
*
|
||||
* Note sur l'emplacement du fichier :
|
||||
* Par convention projet les migrations vivent dans
|
||||
* `src/Module/{Module}/Infrastructure/Doctrine/Migrations/`, sauf pour les
|
||||
* initialisations critiques. Cf. CLAUDE.md (section "Regles d'architecture")
|
||||
* qui documente le bug de tri alphabetique de Doctrine Migrations 3.x avec
|
||||
* plusieurs `migrations_paths` : tant que ce n'est pas corrige, toute
|
||||
* migration d'initialisation (creation de table sur base vide) reste au
|
||||
* namespace racine `DoctrineMigrations` dans `migrations/`.
|
||||
*/
|
||||
final class Version20260417120000 extends AbstractMigration
|
||||
{
|
||||
public function getDescription(): string
|
||||
{
|
||||
return 'Module Sites : creation de la table site (nom, ville, cp, couleur, adresse complete, timestamps).';
|
||||
}
|
||||
|
||||
public function up(Schema $schema): void
|
||||
{
|
||||
// Creation de la table site. Toutes les colonnes sont NOT NULL :
|
||||
// - le champ `color` est contraint cote applicatif au format #RRGGBB
|
||||
// (7 caracteres), la longueur DB est dimensionnee en consequence ;
|
||||
// - `postal_code` est limite a 10 caracteres pour laisser marge a
|
||||
// d'eventuels formats etrangers plus tard, tout en le validant
|
||||
// strictement en 5 chiffres cote applicatif (format FR).
|
||||
//
|
||||
// Note : `full_address` est restructure au ticket 2 (migration
|
||||
// Version20260420130000) en `street` + `complement` (nullable). La
|
||||
// structure d'origine est conservee ici pour ne pas casser les devs
|
||||
// qui ont deja joue cette migration en local.
|
||||
$this->addSql(<<<'SQL'
|
||||
CREATE TABLE site (
|
||||
id INT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
|
||||
name VARCHAR(100) NOT NULL,
|
||||
city VARCHAR(100) NOT NULL,
|
||||
postal_code VARCHAR(10) NOT NULL,
|
||||
color VARCHAR(7) NOT NULL,
|
||||
full_address TEXT NOT NULL,
|
||||
created_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL,
|
||||
updated_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL,
|
||||
PRIMARY KEY (id)
|
||||
)
|
||||
SQL);
|
||||
|
||||
// Index unique sur le nom : garantit l'invariant metier "un site porte
|
||||
// un nom unique" et permet a la contrainte UniqueEntity cote Symfony
|
||||
// de s'appuyer sur une erreur DB en cas de race condition.
|
||||
$this->addSql('CREATE UNIQUE INDEX uniq_site_name ON site (name)');
|
||||
}
|
||||
|
||||
public function down(Schema $schema): void
|
||||
{
|
||||
// Drop direct : aucune FK depuis/vers la table dans ce ticket.
|
||||
$this->addSql('DROP TABLE site');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user