بنية النظام ومنصة إدارة ورش السيارات
منصة ويب متكاملة لإدارة أعمال ورش وصالات السيارات تم بناؤها باستخدام Symfony 6 وDoctrine ORM وEasyAdmin 4. تجمع بين واجهة عرض تزيد من المبيعات، ومحرك بحث AJAX للسيارات المستعملة، ولوحة تحكم متعددة الصلاحيات (RBAC)، وواجهات REST API لتغذية تطبيقات الهاتف.
┌─────────────────────────────────────────────────────────────────────────────┐
│ 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
محرك بحث تفاعلي عبر AJAX
تصفية ديناميكية للسيارات متعددة المعايير باستخدام noUiSlider دون إعادة تحميل الصفحة.
التحكم بالأذونات حسب الأدوار
فصل صارم بين صلاحيات صاحب الورشة (المدير) وصلاحيات الموظفين والفنيين.
واجهة REST API منفصلة
نقاط اتصال JSON آمنة تمد تطبيق الجوال المطور بفلاتر والأنظمة الخارجية بالبيانات.
1. ميزات البوابة العامة للزوار
صُممت المنصة لإبراز خدمات الورشة وتحويل الزوار إلى طلبات صيانة وشراء مؤكدة:
كتالوج خدمات وصيانة السيارات
عرض مفصل لكافة خدمات الورشة (الميكانيكا، السمكرة والدهان، التكييف، والصيانة الدورية) مع إدارة للصور عبر VichUploader.
كتالوج سيارات مستعملة معتمدة
صفحات سيارات تفصيلية (/occasions/vehicule/{id}) تحتوي على معارض صور دوارة، مواصفات فنية، ونموذج اتصال برقم السيارة.
تقييمات وآراء العملاء المعتمدة
نظام تقييم 5 نجوم يتيح للعملاء إرسال آرائهم، مع خضوعها لمراجعة وموافقة الموظفين قبل النشر.
عرض أوقات العمل في الوقت الفعلي
إضافة Twig مخصصة (HoraireExtension) تدرج مواعيد العمل المحدثة مباشرة في تذييل الموقع بشكل تلقائي.
2. محرك التصفية متعدد المعايير عبر AJAX
تجمع بنية البحث المتطورة بين SearchData وSearchForm وVehiculeRepository::findSearch() ومتحكم جافاسكريبت غير متزامن:
| معيار البحث |
عنصر الواجهة |
استعلام Doctrine DQL |
| نطاق السعر |
Dual-handle noUiSlider |
p.prix >= :prixmin AND p.prix <= :prixmax |
| المسافة المقطوعة (كم) |
Dual-handle noUiSlider |
p.kilometrage >= :kmmin AND p.kilometrage <= :kmmax |
| سنة التسجيل |
Dual-handle noUiSlider (1970 - 2026) |
p.annee >= :anneemin AND p.annee <= :anneemax |
| الماركة والموديل |
قوائم منسدلة ديناميكية متتالية (/modeles/fetch) |
m.id IN (:marque) AND d.id IN (:modele) |
| نوع الهيكل والوقود والفئة |
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. إدارة الصلاحيات والأدوار (RBAC)
إدارة دقيقة للصلاحيات ولوحات التحكم باستخدام EasyAdmin وجدران حماية Symfony Security:
ROLE_ADMIN
المدير العام (Vincent Parrot)
- إدارة حسابات الموظفين (إنشاء، وتعيين كلمات المرور مع سياسات تعقيد مشددة).
- إدارة كاملة لنصوص وخدمات وصور ورشة الصيانة عبر نظام إدارة المحتوى.
- تعديل أوقات العمل الأسبوعية وتعيين أيام العطلات والإغلاق.
- مراجعة واستعراض وحذف رسائل واستفسارات العملاء الواردة.
ROLE_EMPLOYE
فريق العمل والموظفون
- إدارة مخزون السيارات المستعملة (إضافة سيارات، رفع عدة صور عالية الدقة، وإضافة الخيارات التقنية).
- ربط تلقائي لبيانات الموظف ككاتب للإعلان عند حفظ السيارة في قاعدة البيانات.
- مراجعة واعتماد تقييمات العملاء (الموافقة على الآراء الحقيقية أو رفض الملاحظات غير الموثقة).
- منع ترقية الصلاحيات إلى رتبة المدير بشكل صارم.
4. نقاط اتصال واجهة REST API
نقاط اتصال JSON آمنة مخصصة لتطبيقات الهاتف والأنظمة الخارجية:
| Method |
Endpoint URL |
الهدف من العملية |
هيكل استجابة JSON |
| GET |
/api/vehicules |
استرداد قائمة كامل مخزون السيارات المتاحة |
JSON Array (JMS getVehicules group) |
| GET |
/api/vehiculesby?page={n} |
استرجاع قائمة سيارات مقسمة لصفحات لتسهيل التصفح |
{ data: [...], pagination: { ... } } |
| GET |
/api/vehicules/{id} |
المواصفات الكاملة ومعرض الصور لمركبة محددة عبر معرفها |
JSON Object (Véhicule, Galerie, Options) |
| GET |
/api/marques-modeles |
الهيكل الكامل لجميع ماركات السيارات والموديلات التابعة لها |
[{ id, nom, modeles: [{ id, nom }] }] |
| POST |
/api/contact |
إرسال استفسار العميل مع إرسال بريد إلكتروني تلقائي |
{ status: "success" } (HTTP 201) |
5. نموذج البيانات وعلاقات Doctrine
مخطط علائقي معياري تحت قاعدة بيانات MySQL مع الحفاظ على التكامل المرجعي:
كيان السيارة والوسائط
علاقة OneToMany متتالية مع VehiculeImage لدعم تعدد الصور وعلاقة ManyToMany مع Employes.
تصنيف وهيكلة السيارات
فصل معياري لكيانات Marque وModele وCarburant (بنزين، ديزل، هجين، كهرباء) وCategorie وType.
العمليات والتواصل
كيانات مخصصة تشمل Service وHoraire وTemoignage (مع وسم الموافقة المنطقي) وContact.
6. هندسة الـ SEO والأداء الرقمي
SEO محلي وترميز دلالي
بيانات Schema.org منظمة لكيانات AutoRepair وProduct/Car، وكثافة كلمات مفتاحية موجهة لمنطقة تولوز وروابط نظيفة.
أداء فائق وتصيير جزئي
تصيير جزئي عبر AJAX لتقليل استهلاك البيانات أثناء التصفية، وتحسين تسليم الصور، وحماية CSRF لجميع النماذج.