feat(sites) : brique fondatrice du module Sites (ticket 1/4)

Module Sites optionnel et desactivable via config/modules.php.
Entite Site (nom unique, ville, CP FR, couleur hex, adresse),
repository + impl Doctrine, migration racine (namespace DoctrineMigrations
conforme exception CLAUDE.md), fixtures idempotentes (Chatellerault,
Saint-Jean, Pommevic), permissions RBAC sites.view/sites.manage.
Tests unitaires + validation via KernelTestCase (UniqueEntity, regex
hex et CP, NotBlank, Length).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-17 15:45:33 +02:00
parent 6b4868b261
commit 8590e3e850
11 changed files with 829 additions and 0 deletions

View File

@@ -3,8 +3,10 @@
declare(strict_types=1);
use App\Module\Commercial\CommercialModule;
use App\Module\Core\CoreModule;
use App\Module\Sites\SitesModule;
return [
CoreModule::class,
CommercialModule::class,
SitesModule::class,
];

View File

@@ -15,6 +15,16 @@ doctrine:
dir: '%kernel.project_dir%/src/Module/Core/Domain/Entity'
prefix: 'App\Module\Core\Domain\Entity'
alias: Core
# Mapping inconditionnelle du module Sites : la structure DB
# existe meme si SitesModule::class est retire de config/modules.php.
# L'activation fonctionnelle (ex: exposition des permissions, futurs
# endpoints API) passe exclusivement par config/modules.php.
Sites:
type: attribute
is_bundle: false
dir: '%kernel.project_dir%/src/Module/Sites/Domain/Entity'
prefix: 'App\Module\Sites\Domain\Entity'
alias: Sites
controller_resolver:
auto_mapping: false

View File

@@ -24,3 +24,6 @@ services:
App\Module\Core\Domain\Repository\UserRepositoryInterface:
alias: App\Module\Core\Infrastructure\Doctrine\DoctrineUserRepository
App\Module\Sites\Domain\Repository\SiteRepositoryInterface:
alias: App\Module\Sites\Infrastructure\Doctrine\DoctrineSiteRepository