← Retour aux réalisations Application web · Automobile

V. Parrot Garage

Un catalogue de véhicules avec filtres avancés, fiches détaillées et gestion des images.

V. Parrot Garage
PROJET

Le projet

V. Parrot illustre une architecture Symfony plus orientée application, avec catalogue de véhicules, filtres avancés, données structurées et gestion des images.

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.

Explorer la Plateforme en Ligne

Découvrez le catalogue des véhicules d'occasion et testez le moteur de filtrage en direct.

Visiter le Site Web du Garage ↗