Le backend de Save France est construit avec Symfony 7.3 et utilise API Platform pour exposer une API REST. L'application suit une architecture modulaire organisée par domaines métier (Maintenance, Troubleshooting, Equipment) avec une séparation claire des responsabilités.
flowchart TD
A[Client] --> B[Caddy Reverse Proxy]
B --> C[FrankenPHP]
C --> D[API Platform]
D --> E[Controllers]
E --> F[Services]
F --> G[Repositories]
G --> H[(PostgreSQL)]
E --> I[Processors]
E --> J[Providers]
F --> K[External Services]
K --> L[Stripe]
K --> M[Yousign]
K --> N[Brevo]
K --> O[Gotenberg]
style C fill:#4CAF50
style D fill:#42B883
style H fill:#336791
api/sources/src/
├── Command/ # Commandes console Symfony
│ ├── EmailUnsignedContractsCommand.php
│ └── UpdateContractCommand.php
├── Controller/ # Contrôleurs HTTP
│ ├── Admin/ # Backoffice EasyAdmin
│ │ ├── Configuration/ # CRUD de configuration
│ │ ├── Equipment/ # CRUD équipements
│ │ ├── Filter/ # Filtres personnalisés
│ │ ├── Offer/ # Gestion des offres
│ │ ├── Request/ # Gestion des demandes
│ │ └── Troubleshooting/ # Gestion des dépannages
│ ├── Api/ # Points d'API REST
│ ├── Sav/ # API pour le SAV
│ └── Webhook/ # Webhooks externes
├── DataFixtures/ # Données de test
├── Doctrine/ # Extensions Doctrine
│ └── Api/ # Extensions API Platform
├── Dto/ # Data Transfer Objects
├── Entity/ # Entités Doctrine
│ ├── Equipment/ # Équipements
│ ├── Maintenance/ # Maintenance
│ ├── MaintenanceOffer/ # Offres de maintenance
│ └── Troubleshooting/ # Dépannage
├── Enum/ # Énumérations
├── EventListener/ # Écouteurs d'événements
├── Form/ # Formulaires Symfony
├── Mailer/ # Système d'email
│ ├── Factory/ # Factories de mails
│ └── Mail/ # Classes de mails
├── Processor/ # Processors API Platform
├── Provider/ # Providers API Platform
├── Repository/ # Référentiels de données
├── Service/ # Logique métier
│ ├── Contract/ # Services de contrat
│ ├── Request/ # Services de demande
│ └── Yousign/ # Intégration Yousign
└── Validator/ # Contraintes de validation
sequenceDiagram
participant C as Client
participant A as API Platform
participant P as Processor
participant S as Service
participant R as Repository
participant D as Database
C->>A: Requête HTTP (JSON)
A->>P: Dénormalisation
P->>S: Validation & Logique métier
S->>R: Récupération données
R->>D: Requête SQL
D-->>R: Résultats
R-->>S: Entités Doctrine
S-->>P: Traitement
P->>A: Normalisation
A-->>C: Réponse JSON
Gestion des demandes de maintenance avec :
Entités principales :
Maintenance\Request : Demande de maintenanceMaintenance\Offer : Offre associéeMaintenance\Equipment : Équipements concernésMaintenance\Contract : Contrats générésMaintenance\Price : Calculs de prixMaintenance\Discount : Codes de réductionGestion des demandes de dépannage avec :
Entités principales :
Troubleshooting\Troubleshooting : Demande de dépannageTroubleshooting\Diagnosis : Diagnostics possiblesRéférentiel des équipements avec :
Entités principales :
Equipment\Category : CatégoriesEquipment\Type : TypesEquipment\Brand : MarquesCoefficientRate : CoefficientsL'API est construite avec API Platform qui fournit :
GET : Récupération de collectionGET /{id} : Récupération d'un élémentPOST : CréationPATCH : Mise à jour partielleDELETE : SuppressionRequestDiscountPostProcessor : Application de codes de réductionRequestPatchProcessor : Mise à jour des demandesTroubleshootingPostProcessor : Traitement des dépannagesPostalCodeRequestProvider : Données enrichies pour les demandesPostalCodeTroubleshootingProvider : Données enrichies pour les dépannagesGetContractProvider : Récupération de contratsDoctrine\Api\RequestExtension : Filtres sur les demandesAuthorizationService de calcul des offres de maintenance :
Voir la documentation complète du calcul des tarifs pour plus de détails.
Gestion complète des contrats :
Intégration avec Stripe :
Intégration avec Yousign :
Voir la documentation complète YouSign pour plus de détails.
Système d'email avec factories :
Factory\User\* : Emails utilisateursFactory\Admin\* : Emails administrateurs/api/auth/refresh pour renouvelerContractServiceInterface)readonly quand possibletests/Api/tests/Service/Voir la documentation des tests du calcul des tarifs pour un exemple complet.
git checkout -b feature/ma-nouvelle-fonctionnalite
php bin/console make:migration# Tests
php bin/phpunit
# Analyse statique
vendor/bin/phpstan analyse
# Qualité de code
vendor/bin/ecs check
Pour les opérations sur la base (restauration, dump, vidage des données) avec Docker, voir Manipulation de la base de données.
# Migrations
php bin/console make:migration
php bin/console doctrine:migrations:migrate
# Fixtures
php bin/console doctrine:fixtures:load
# Cache
php bin/console cache:clear
# Créer une entité
php bin/console make:entity
# Créer un contrôleur API Platform
php bin/console make:api-platform:resource
# Créer un service
php bin/console make:service
Le déploiement se fait via GitLab CI/CD avec :
/metrics