Skip to content

Latest commit

 

History

History

README.md

API — Backend Symfony / API Platform

Backend du monorepo. Voir le README.md racine pour le démarrage rapide.

Stack

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)

Architecture DDD

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.bus pour les écritures (sync + async via RabbitMQ), query.bus pour les lectures (sync uniquement).

Authentification

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/.

Multi-tenant

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.

Commandes utiles

# 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
"

Tests

# 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

Qualité du code

# 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-run

Aprè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.