C3 · Composants Backend¶
Le diagramme de composants backend (niveau 3 C4) détaille l'organisation interne de l'API Laravel selon les principes DDD.
Diagramme¶
C4Component
title Composants — API Laravel (DDD)
Container_Boundary(api, "API Laravel") {
Component(controllers, "Controllers API V1", "Laravel Http", "Point d'entrée HTTP\nValidation via FormRequests\nRéponse via Resources")
Component_Boundary(domain, "Domain Layer") {
Component(auth_domain, "Auth Domain", "PHP Service", "Inscription, login\nGestion tokens JWT")
Component(game_domain, "Game Domain", "PHP Service", "Création parties\nValidation scores")
Component(club_domain, "Club Domain", "PHP Service", "Gestion clubs\nTerrains, créneaux")
Component(reservation_domain, "Reservation Domain", "PHP Service", "Réservation de terrains\nGestion créneaux")
}
Component(repo_interfaces, "Repository Interfaces", "PHP Interface", "Contrats d'accès données\nindépendants de l'ORM")
Component_Boundary(infra, "Infrastructure Layer") {
Component(eloquent_repos, "Eloquent Repositories", "Laravel Eloquent", "Implémentations concrètes\ndes repositories")
}
Component(events, "Domain Events", "Laravel Events", "Événements métier\n(ScoreValidated, GameCompleted)")
Component(jobs, "Queue Jobs", "Laravel Queues", "Tâches asynchrones\n(Email, Notifs)")
}
Rel(controllers, auth_domain, "Appelle")
Rel(controllers, game_domain, "Appelle")
Rel(controllers, club_domain, "Appelle")
Rel(controllers, reservation_domain, "Appelle")
Rel(auth_domain, repo_interfaces, "Utilise")
Rel(game_domain, repo_interfaces, "Utilise")
Rel(club_domain, repo_interfaces, "Utilise")
Rel(reservation_domain, repo_interfaces, "Utilise")
Rel(repo_interfaces, eloquent_repos, "Implémenté par")
Rel(game_domain, events, "Dispatch")
Rel(events, jobs, "Déclenche") Structure de dossiers¶
api/app/
├── Domain/
│ ├── Auth/
│ │ ├── DTOs/ # LoginDTO, RegisterDTO
│ │ ├── Events/ # UserRegistered
│ │ ├── Models/ # (User entity, pas Eloquent)
│ │ ├── Repositories/ # UserRepositoryInterface
│ │ └── Services/ # AuthService, TokenService
│ ├── Game/
│ │ ├── DTOs/ # CreateGameDTO, ScoreDTO
│ │ ├── Events/ # GameCompleted, ScoreValidated
│ │ ├── Models/ # Game, Score (Value Objects)
│ │ ├── Repositories/ # GameRepositoryInterface
│ │ └── Services/ # GameService
│ ├── Club/
│ │ └── ... # ClubService, TerrainService
│ ├── Creneau/
│ │ └── ... # CreneauService, CreneauRepositoryInterface
│ ├── Reservation/
│ │ └── ... # ReservationService
│ └── Terrain/
│ └── ... # TerrainService, TerrainRepositoryInterface
├── Http/
│ ├── Controllers/Api/V1/ # AuthController, GameController
│ ├── Requests/ # LoginRequest, CreateGameRequest
│ └── Resources/ # UserResource, GameResource
└── Infrastructure/
└── Repositories/ # EloquentUserRepository, EloquentGameRepository
Règles d'architecture (enforced par Pest Arch)¶
Tests d'architecture
Ces règles sont vérifiées automatiquement via make test-arch
Domain/ne doit PAS importer depuisHttp/ouInfrastructure/Infrastructure/peut importer depuisDomain/(implement interfaces)Http/peut importer depuisDomain/(use services)- Les Models Eloquent sont dans
app/Models/, pas dansDomain/