Architecture & Vue d’ensemble¶
Pile technique¶
- Backend: Symfony 7 (FrameworkBundle, Security, Validator, Serializer, Twig).
- API: API Platform 3 (stateless par défaut, OpenAPI/JSON-LD).
- Persistence: Doctrine ORM 3 + DBAL 3, Migrations.
- Authentification: JWT (LexikJWT), Custom authenticator AuthControllerAuthenticator.
- Paiements: Stripe SDK, Orange Money bundle.
- Emails: Symfony Mailer.
- PDF: Dompdf.
- Frontend: Twig + assets statiques (Bootstrap, jQuery, OwlCarousel, DataTables).
Structure du projet¶
- Application: src
- Entités: Entity
- Contrôleurs: Controller
- Services: Service
- Sécurité: Security
- Formulaires: Form
- Repository: Repository
- Écouteurs/Abonnés: EventListener, EventSubscriber
- Présentation: templates, public/assets
- Configuration: config
- Migrations: migrations
- Déploiement: Dockerfile, compose.yaml
Modules principaux¶
- Authentification & Session
- JWT API login: route
/api/login_checkvia LexikJWT. - Authenticator web: AuthControllerAuthenticator.
- Rappels (“remember me”): configurés dans security.yaml.
- Gestion d’entreprise (Business)
- CRUD Business, Types, Secteurs, Catégories.
- Uploads de documents: service UploaderService.
- Points de vente (POS)
- CRUD POS & utilisateurs POS, synchronisation avec API externe via PointOfSaleController et TokenService.
- Abonnements & Tarification
- Plans, Souscriptions, Features: controllers + services SubscriptionService, SubscriptionChecker.
- Paiement & Facturation
- Stripe: StripeService.
- Orange Money: intégration via bundle; endpoints dans PaymentController.
- Génération PDF factures: DomPdfService.
Flux clés¶
- Onboarding utilisateur:
- Création via UserController et emails MailerService.
- Activation abonnement:
- Sélection plan -> paiement -> enregistrement SubscriptionController / PaymentController.
- Synchronisation POS:
- Récupération token système -> appels API externe pour utilisateurs POS (TokenService, PointOfSaleController).
Conventions¶
- PHP 8.2+, typage strict des services et controllers.
- Twig pour vues, assets via
public/assets. - Repositories Doctrine pour accès DB.
- Éviter de mettre des secrets en dur; utiliser
.envetservices.yaml.