Architektura systemu & Platforma biznesowa
Kompleksowa platforma webowa dla branży motoryzacyjnej stworzona w Symfony 6, Doctrine ORM i EasyAdmin 4. Łączy w sobie stronę handlową o wysokiej konwersji, wyszukiwarkę aut używanych w technologii AJAX, panel uprawnień (RBAC) oraz API REST dla aplikacji mobilnych.
┌─────────────────────────────────────────────────────────────────────────────┐
│ 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
Wyszukiwarka AJAX
Dynamiczne wielokryterialne filtrowanie pojazdów z noUiSlider bez przeładowywania strony.
Kontrola dostępu (RBAC)
Rygorystyczny podział uprawnień między właścicielem warsztatu a pracownikami.
Niezależne API REST
Bezpieczne punkty końcowe JSON zasilające aplikację mobilną we Flutterze i integracje zewnętrzne.
1. Funkcje portalu publicznego
Zaprojektowany, aby prezentować usługi warsztatu i skutecznie pozyskiwać zapytania ofertowe:
CMS Usług warsztatowych
Szczegółowa prezentacja napraw (mechanika, blacharstwo, lakiernictwo, klimatyzacja, przeglądy) z obsługą zdjęć przez VichUploader.
Katalog samochodów używanych
Szczegółowe karty pojazdów (/occasions/vehicule/{id}) z karuzelą zdjęć, danymi technicznymi i formularzem z automatycznie wpisanym modelem.
Opinie klientów i moderacja
System ocen w skali 5 gwiazdek z zabezpieczeniem antyspamowym i weryfikacją przez pracowników przed publikacją.
Dynamiczne godziny otwarcia
Dedykowane rozszerzenie Twig (HoraireExtension) wstawiające w czasie rzeczywistym aktualny grafik do stopki strony.
2. Wielokryterialny silnik filtrowania AJAX
Filtrowanie łączy SearchData, SearchForm, VehiculeRepository::findSearch() oraz asynchroniczny kontroler JavaScript:
| Kryterium wyszukiwania |
Komponent interfejsu |
Zapytanie Doctrine DQL |
| Przedział cenowy |
Dual-handle noUiSlider |
p.prix >= :prixmin AND p.prix <= :prixmax |
| Przebieg (km) |
Dual-handle noUiSlider |
p.kilometrage >= :kmmin AND p.kilometrage <= :kmmax |
| Rok produkcji |
Dual-handle noUiSlider (1970 - 2026) |
p.annee >= :anneemin AND p.annee <= :anneemax |
| Marka & Model |
Dynamiczne powiązane listy rozwijane (/modeles/fetch) |
m.id IN (:marque) AND d.id IN (:modele) |
| Nadwozie, Paliwo & Kategoria |
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. Kontrola dostępu oparta na rolach (RBAC)
Zarządzanie uprawnieniami i panelami administracyjnymi za pośrednictwem EasyAdmin i Symfony Security:
ROLE_ADMIN
Administrator (Vincent Parrot)
- Zarządzanie kontami pracowników (tworzenie, resetowanie haseł z wymogiem wysokiej złożoności).
- Pełne zarządzanie usługami warsztatu, tekstami i materiałami graficznymi w CMS.
- Konfiguracja tygodniowego harmonogramu godzin otwarcia i dni wolnych od pracy.
- Przeglądanie i zarządzanie otrzymanymi wiadomościami od klientów.
ROLE_EMPLOYE
Pracownicy warsztatu
- Zarządzanie bazą aut używanych (dodawanie, przesyłanie wielu zdjęć, konfiguracja opcji wyposażenia).
- Automatyczne przypisanie zalogowanego pracownika jako autora ogłoszenia podczas zapisu do bazy.
- Moderacja opinii klientów (zatwierdzanie rzetelnych recenzji lub odrzucanie spamu).
- Brak możliwości podniesienia własnych uprawnień do poziomu Administratora.
4. Punkty końcowe headless API REST
Bezpieczne endpointy JSON dedykowane dla aplikacji mobilnej i systemów zewnętrznych:
| Method |
Endpoint URL |
Przeznaczenie operacji |
Format odpowiedzi JSON |
| GET |
/api/vehicules |
Pobieranie pełnej listy dostępnych pojazdów |
JSON Array (JMS getVehicules group) |
| GET |
/api/vehiculesby?page={n} |
Stronicowana lista pojazdów do płynnego doczytywania |
{ data: [...], pagination: { ... } } |
| GET |
/api/vehicules/{id} |
Pełna specyfikacja i galeria zdjęć dla konkretnego identyfikatora pojazdu |
JSON Object (Véhicule, Galerie, Options) |
| GET |
/api/marques-modeles |
Kompletna hierarchia dostępnych marek i modeli |
[{ id, nom, modeles: [{ id, nom }] }] |
| POST |
/api/contact |
Wysyłka formularza kontaktowego z automatycznym powiadomieniem e-mail |
{ status: "success" } (HTTP 201) |
5. Model danych & Relacje Doctrine
Znormalizowany schemat relacyjny z integralnością kluczy obcych w bazie MySQL:
Encja Pojazd & Galeria
Kaskadowa relacja OneToMany z VehiculeImage dla wielu zdjęć oraz ManyToMany z tabelą Employes.
Taksonomia motoryzacyjna
Normalizacja encji Marque, Modele, Carburant (Benzyna, Diesel, Hybryda, Elektryczny), Categorie i Type.
Operacje & Interakcje
Dedykowane encje dla Service, Horaire, Temoignage (z flagą akceptacji) oraz Contact.
6. Architektura SEO & Wydajność
Lokalne SEO & Dane strukturalne
Formatowanie Schema.org dla encji AutoRepair i Product/Car, nasycenie słowami kluczowymi dla rejonu Tuluzy i czyste adresy URL.
Wydajność & Częściowe renderowanie
Częściowe renderowanie asynchroniczne AJAX ograniczające transfer danych podczas filtrowania, optymalizacja zdjęć i ochrona CSRF.