Architecture Système & Plateforme Métier
Application web métier complète développée avec Symfony 6, Doctrine ORM et EasyAdmin 4. Elle combine une vitrine commerciale haute performance, un moteur de recherche de véhicules d'occasion en AJAX, un espace d'administration sécurisé (RBAC) et une API REST consommée par des applications mobiles.
┌─────────────────────────────────────────────────────────────────────────────┐
│ Garage Vincent Parrot — Architecture Dual-Tier │
└──────────────────────────────────────┬──────────────────────────────────────┘
│
┌───────────────────────────┼───────────────────────────┐
▼ ▼ ▼
🚗 Moteur Véhicules & AJAX 👥 Back-Office RBAC 📡 API REST Headless
• noUiSlider (Prix, Km, Année) • EasyAdmin 4 Dashboard • Serializer JMS Groups
• Dropdowns dépendants BDD • Isolation ROLE_ADMIN/EMP • Endpoints paginés (/api)
• Rendu partiel JSON/Twig • Modération avis clients • Support Mobile & Cross-App
• VichUploader multi-photos • Gestion horaires & services • Sécurité CORS & CSRF
Moteur de Recherche AJAX
Filtrage dynamique multi-critères avec noUiSlider sans rechargement de page.
Gestion des Rôles (RBAC)
Séparation stricte des privilèges entre l'administrateur du garage et les employés.
API REST Découplée
Endpoints JSON sécurisés alimentant l'application mobile Flutter et les intégrations tierces.
1. Fonctionnalités de la Vitrine Publique
Le portail public est conçu pour valoriser les services du garage et maximiser les prises de contact :
Catalogue des Prestations & Réparations
Présentation détaillée des services d'atelier (mécanique, carrosserie, climatisation, révision) avec gestion des visuels via VichUploader.
Catalogue des Véhicules d'Occasion
Fiches véhicules complètes (/occasions/vehicule/{id}) avec galerie carrousel, caractéristiques techniques et formulaire de contact pré-rempli.
Avis Clients & Témoignages Modérés
Système de notation 5 étoiles permettant aux clients de déposer un avis, soumis à une validation préalable par les employés.
Horaires d'Ouverture Dynamiques
Extension Twig dédiée (HoraireExtension) injectant en temps réel les horaires d'ouverture à jour dans le footer global.
2. Moteur de Filtrage Multi-Critères en AJAX
L'architecture de recherche associe SearchData, SearchForm, VehiculeRepository::findSearch() et un contrôleur JavaScript asynchrone :
| Critère de Recherche |
Composant UI |
Requête Doctrine DQL |
| Fourchette de Prix |
Dual-handle noUiSlider |
p.prix >= :prixmin AND p.prix <= :prixmax |
| Kilométrage |
Dual-handle noUiSlider |
p.kilometrage >= :kmmin AND p.kilometrage <= :kmmax |
| Année de Mise en Circulation |
Dual-handle noUiSlider (1970 - 2026) |
p.annee >= :anneemin AND p.annee <= :anneemax |
| Marque & Modèle |
Menus déroulants dépendants dynamiques (/modeles/fetch) |
m.id IN (:marque) AND d.id IN (:modele) |
| Carrosserie, Énergie & Catégorie |
Checkboxes (Carrosserie, Énergie) |
t.id IN (:type), a.id IN (:carburant) |
// Rendu partiel asynchrone JSON dans OccasionsController.php
if ($request->get('ajax')) {
return new JsonResponse([
'content' => $this->renderView('occasions/_occasions.html.twig', ['occasions' => $occasions]),
'sorting' => $this->renderView('occasions/_sorting.html.twig', ['occasions' => $occasions]),
'pagination' => $this->renderView('occasions/_pagination.html.twig', ['occasions' => $occasions]),
'prixmin' => $prixmin, 'prixmax' => $prixmax,
'kmmin' => $kmmin, 'kmmax' => $kmmax,
'anneemin' => $anneemin,'anneemax'=> $anneemax
]);
}
3. Contrôle d'Accès Basé sur les Rôles (RBAC)
Gestion des accès et des interfaces d'administration via EasyAdmin et les Firewalls Symfony Security :
ROLE_ADMIN
Administrateur (Vincent Parrot)
- Gestion des comptes employés (création, réinitialisation de mot de passe avec règles de complexité renforcées).
- CMS complet des prestations et services du garage (textes, tarifs, visuels).
- Mise à jour des horaires d'ouverture et gestion des jours de fermeture.
- Consultation et gestion des messages de contact reçus.
ROLE_EMPLOYE
Employés de l'Atelier
- Gestion complète du parc d'occasions (création, téléversement de photos multiples, configuration des options).
- Attribution automatique de l'employé connecté comme auteur de l'annonce lors de la persistance.
- Modération des avis clients (approbation pour publication ou rejet des faux avis).
- Impossibilité d'élever ses propres droits d'accès au rôle Administrateur.
4. Endpoints de l'API REST Headless
Endpoints JSON sécurisés pour l'application mobile et les outils externes :
| Method |
Endpoint URL |
Description de l'Opération |
Format de Réponse JSON |
| GET |
/api/vehicules |
Récupération de la liste complète des véhicules en stock |
JSON Array (JMS getVehicules group) |
| GET |
/api/vehiculesby?page={n} |
Collection paginée de véhicules (pagination par lot) |
{ data: [...], pagination: { ... } } |
| GET |
/api/vehicules/{id} |
Fiche technique détaillée d'un véhicule par son identifiant |
JSON Object (Véhicule, Galerie, Options) |
| GET |
/api/marques-modeles |
Arborescence complète des marques et modèles disponibles |
[{ id, nom, modeles: [{ id, nom }] }] |
| POST |
/api/contact |
Soumission d'une demande de contact client avec envoi d'e-mail automatique |
{ status: "success" } (HTTP 201) |
5. Modèle de Données & Relations Doctrine
Schéma relationnel normalisé avec contraintes d'intégrité référentielle sous MySQL :
Entité Véhicule & Galerie
Gestion OneToMany en cascade vers VehiculeImage pour les photos multiples et ManyToMany avec Employes.
Taxonomie Automobile
Normalisation des entités Marque, Modele, Carburant (Diesel, Essence, Électrique, Hybride), Categorie et Type.
Opérations & Interactions
Entités dédiées Service, Horaire, Temoignage (avec flag d'approbation booléen) et Contact.
6. Stratégie SEO & Optimisation des Performances
SEO Local & Balisage Sémantique
Balisage Schema.org pour les entités AutoRepair et Product/Car, URLs canoniques et structure sémantique ciblée sur le marché toulousain.
Performances & Rendu Partiel
Rendu partiel en AJAX pour minimiser le transfert réseau lors des filtrages, traitement optimisé des images et protection CSRF sur tous les formulaires.