- Symfony 8.0
- Clean Architecture
- Domain-Driven Development
- Docker
- Docker Compose
docker compose up -d --build docker compose exec app composer install docker compose exec app php bin/console doctrine:migrations:migrate --no-interaction
docker compose exec app php bin/phpunit
POST /api/teams - Create team GET /api/teams - List teams GET /api/teams/{id} - Get team with players PUT /api/teams/{id} - Update team DELETE /api/teams/{id} - Delete team + players POST /api/teams/{teamId}/players - Add player to team GET /api/players/{id} - Get player PUT /api/players/{id} - Update player DELETE /api/players/{id} - Delete player
- Team is the Aggregate Root, Player is a child entity
- 11-player limit enforced at domain level
- When city relocation triggers a domain event – it sends a notification via Symfony Messenger
- Cascade delete via Doctrine mapping (orphanRemoval + onDelete CASCADE)