diff --git a/CLAUDE.md b/CLAUDE.md index 352e31a..2a9453a 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,6 +1,69 @@ # Coltura -CRM/ERP. Monorepo Symfony 8 (API Platform 4) + Nuxt 4. +CRM/ERP. Monorepo Symfony 8 (API Platform 4) + Nuxt 4. **Architecture DDD (Domain-Driven Design).** + +## Architecture DDD + +Le projet suit une architecture DDD cote backend ET frontend. Le code est organise par **domaine metier** (Bounded Context), pas par type technique. + +### Backend — Organisation par domaine + +``` +src/ + Domain/ # Couche domaine (logique metier pure, aucune dependance framework) + {BoundedContext}/ # Ex: Customer, Sales, Catalog, Invoice... + Entity/ # Entites et Aggregates du domaine + ValueObject/ # Value Objects (Money, Address, Email...) + Repository/ # Interfaces des repositories (ports) + Service/ # Services domaine (logique metier) + Event/ # Domain Events + Exception/ # Exceptions metier + Application/ # Couche application (cas d'usage, orchestration) + {BoundedContext}/ + Command/ # Commands (write) + Handlers + Query/ # Queries (read) + Handlers + DTO/ # Data Transfer Objects + Infrastructure/ # Couche infrastructure (implementations techniques) + {BoundedContext}/ + Repository/ # Implementations Doctrine des repositories + Persistence/ # Mapping Doctrine (si XML/YAML) + Shared/ # Services techniques partages (mail, storage, etc.) + Api/ # Couche API (exposition HTTP) + {BoundedContext}/ + Resource/ # ApiResource API Platform + State/ # Providers & Processors API Platform +``` + +**Regles DDD backend :** +- Le domaine (`Domain/`) ne depend de RIEN (pas de Doctrine, pas de Symfony, pas d'API Platform) +- Les repositories dans `Domain/` sont des **interfaces** ; les implementations Doctrine sont dans `Infrastructure/` +- Les entites API Platform (`Api/Resource/`) sont decouples des entites domaine si necessaire +- Chaque Bounded Context est autonome — pas d'import croise entre contextes (communiquer via events ou services application) +- `User` et `Auth` restent dans `src/` (hors DDD) car c'est du framework pur (Security Bundle) + +### Frontend — Organisation par domaine + +``` +frontend/ + domains/ # Modules metier + {bounded-context}/ # Ex: customer, sales, catalog, invoice... + components/ # Composants Vue specifiques au domaine + composables/ # Composables specifiques au domaine + services/ # Services API du domaine + dto/ # Types TypeScript du domaine + pages/ # Pages du domaine (optionnel, ou dans pages/) + stores/ # Store Pinia du domaine (si necessaire) + components/ # Composants UI partages (non lies a un domaine) + composables/ # Composables partages (useApi, useAppVersion) + stores/ # Stores globaux (auth, ui) + services/ # Services partages +``` + +**Regles DDD frontend :** +- Chaque domaine est un dossier autonome dans `frontend/domains/` +- Un domaine ne doit pas importer depuis un autre domaine — utiliser les composables/stores partages +- Les composants, services et types partages restent a la racine (`components/`, `composables/`, etc.) +- Les pages peuvent etre dans `frontend/pages/` (routing Nuxt) et importer les composants du domaine ## Stack @@ -12,26 +75,37 @@ CRM/ERP. Monorepo Symfony 8 (API Platform 4) + Nuxt 4. ## Structure ``` -src/Entity/ # Entites Doctrine (User) -src/ApiResource/ # Ressources API Platform decouples (AppVersion) -src/State/ # Providers et Processors API Platform (MeProvider, AppVersionProvider, UserPasswordHasherProcessor) -src/Service/ # Services metier -src/Repository/ # Repositories Doctrine -src/DataFixtures/ # Fixtures -config/ # Config Symfony (security, api_platform, lexik_jwt, nelmio_cors, doctrine) -config/jwt/ # Cles JWT (private.pem, public.pem) -migrations/ # Migrations Doctrine -infra/dev/ # Config Docker dev (Dockerfile, nginx, php.ini, xdebug) -infra/prod/ # Config Docker prod (Dockerfile multi-stage, nginx, php-prod.ini) -frontend/ # App Nuxt 4 -frontend/pages/ # Pages (index, login) -frontend/layouts/ # Layouts (default) -frontend/components/ # Composants Vue -frontend/composables/# Composables (useApi, useAppVersion) -frontend/stores/ # Stores Pinia (auth, ui) -frontend/services/ # Services API (auth) -frontend/services/dto/ # Types TypeScript -frontend/i18n/locales/ # Fichiers de traduction +src/ + Domain/{Context}/Entity/ # Entites domaine + Domain/{Context}/ValueObject/ # Value Objects + Domain/{Context}/Repository/ # Interfaces repositories + Domain/{Context}/Service/ # Services domaine + Domain/{Context}/Event/ # Domain Events + Application/{Context}/Command/ # Commands + Handlers + Application/{Context}/Query/ # Queries + Handlers + Application/{Context}/DTO/ # Data Transfer Objects + Infrastructure/{Context}/Repository/ # Implementations Doctrine + Api/{Context}/Resource/ # ApiResource API Platform + Api/{Context}/State/ # Providers & Processors + Entity/ # Entites framework (User) + DataFixtures/ # Fixtures +config/ # Config Symfony +config/jwt/ # Cles JWT +migrations/ # Migrations Doctrine +infra/dev/ # Docker dev +infra/prod/ # Docker prod (multi-stage) +frontend/ + domains/{context}/components/ # Composants du domaine + domains/{context}/composables/ # Composables du domaine + domains/{context}/services/ # Services API du domaine + domains/{context}/dto/ # Types TS du domaine + domains/{context}/stores/ # Store Pinia du domaine + components/ # Composants UI partages + composables/ # Composables partages (useApi, useAppVersion) + stores/ # Stores globaux (auth, ui) + pages/ # Pages (routing Nuxt) + layouts/ # Layouts + i18n/locales/ # Traductions ``` ## Commandes