Backend du monorepo. Voir le README.md racine pour le démarrage rapide.
| Composant | Technologie | Version |
|---|---|---|
| Langage | PHP | 8.5 |
| Framework | Symfony | 7.4 |
| API | API Platform | 4.3 |
| Serveur web | FrankenPHP (worker mode) | latest |
| Base de données | PostgreSQL | 16 |
| Cache / Sessions | Redis | 7 |
| Queues async | RabbitMQ | 4 |
| Auth | JWT ED25519 (lexik/jwt-authentication-bundle) + SSO Google / Microsoft |
— |
| Push | Firebase Cloud Messaging (kreait/firebase-php) |
— |
| Scheduler | Symfony Scheduler | — |
| Bus de messages | Symfony Messenger (CQRS) | — |
Le code est organisé par bounded contexts. Le skeleton fournit le contexte Identity comme exemple de référence ; ajoutez vos propres contextes (un dossier par contexte) en suivant la même structure.
src/
├── Identity/ # Contexte d'exemple : utilisateurs, auth, vérification email
├── Technical/ # Partagé : helpers sécurité, utilitaires de test
└── <YourContext>/ # Ajouter vos contextes métier ici
Conventions importantes :
- Les entités du domaine sont des objets PHP avec mapping Doctrine via attributs PHP.
#[ApiResource]uniquement sur les DTOs.command.buspour les écritures (sync + async via RabbitMQ),query.buspour les lectures (sync uniquement).
Deux mécanismes coexistent :
| Endpoint | Mécanisme |
|---|---|
POST /auth/token |
json_login — retourne un JWT + refresh token |
POST /auth/token/refresh |
gesdinet/jwt-refresh-token-bundle — renouvelle le JWT |
GET /auth/callback/google |
SSO Google OAuth2 |
GET /auth/callback/microsoft |
SSO Microsoft OAuth2 |
Les clés JWT sont en ED25519 sans passphrase, stockées dans config/jwt/.
Chaque client dispose de sa propre base PostgreSQL. La résolution du tenant s'effectue à chaque requête à partir du JWT. La base est provisionnée automatiquement au premier login et les migrations y sont appliquées.
# Toutes les commandes s'exécutent dans le container
docker compose exec php <commande>
# Migrations Doctrine
docker compose exec php bin/console doctrine:migrations:diff
docker compose exec php bin/console doctrine:migrations:migrate
# Cache
docker compose exec php bin/console cache:clear
# Générer les clés JWT (si absentes)
docker compose run --rm php sh -c "
mkdir -p config/jwt &&
openssl genpkey -algorithm ed25519 -out config/jwt/private.pem &&
openssl pkey -in config/jwt/private.pem -pubout -out config/jwt/public.pem
"# Tous les tests
docker compose run --rm php bin/phpunit
# Par suite
docker compose run --rm php bin/phpunit --testsuite unit
docker compose run --rm php bin/phpunit --testsuite integration
# Avec couverture HTML (nécessite Xdebug)
docker compose run --rm php bin/phpunit --coverage-html var/coverage# Analyse statique — PHPStan niveau 8
docker compose run --rm php composer phpstan
# Style de code — PHP CS Fixer
docker compose run --rm php vendor/bin/php-cs-fixer fix --dry-run --diff
docker compose run --rm php vendor/bin/php-cs-fixer fix
# Refactoring automatisé — Rector (cible PHP 8.5)
docker compose run --rm php vendor/bin/rector process --dry-runAprès toute modification de fichiers PHP, exécuter PHP CS Fixer avant de finaliser. Voir api/AGENTS.md pour les règles détaillées.