Web Development April 2026 1191 views

رحلات مصر

رحلات مصر — منصة التجارب العالمية تقديم تجارب سياحية وسفر ذات معدلات تحويل عالية، تعتمد على تحسين محركات البحث (SEO) كأولوية، مع هندسة برمجية بمستوى المؤسسات لضمان السرعة والموثوقية والتعريب.

رحلات مصر

رحلات مصر — منصة التجارب العالمية

تقديم تجارب سياحية وسفر ذات معدلات تحويل عالية، تعتمد على تحسين محركات البحث (SEO) كأولوية، مع هندسة برمجية بمستوى المؤسسات لضمان السرعة والموثوقية والتعريب.

هذا المستودع عبارة عن تطبيق Laravel موجه للإنتاج يعمل على تشغيل منصة سياحية متعددة اللغات والعملات. يحل التطبيق مشكلة واقعية تتمثل في إدارة مخزونات كبيرة من منتجات السفر غير المتجانسة (رحلات اليوم الواحد، الباقات، الرحلات البحرية) من خلال توفير:

  • كتالوج منتجات سريع وقابل للتصفية ومحسن للاستعلامات ذات زمن الانتقال المنخفض وعمليات البحث متعددة الأوجه.
  • محرك تسعير وحجز مرن يدعم التسعير بناءً على النطاق الزمني، ومتغيرات الغرف/المقصورات، وسياسات تسعير الأطفال.

القيمة الجوهرية وأبرز مميزات التسويق

  • الأداء وقابلية التوسع: تم بناء المنصة على Laravel 12 ومحسنة للتوسع من خلال إزالة التطبيع الاستراتيجي (جدول product_filters)، والتخزين المؤقت الصديق لـ Redis في خدمات مثل CurrencyService، وتجميع الواجهة الأمامية عبر Vite. يتم حساب التجميعات الثقيلة مسبقاً وقت الكتابة مما يتيح مسارات قراءة سريعة للغاية للتصفية والقوائم.

  • تميز تجربة المستخدم (UX/UI): يوفر Tailwind CSS v4 + Vite واجهة مستخدم سريعة الاستجابة ومبنية على المكونات. تم تضمين التحسينات التدريجية ونقاط النهاية JSON (مثل /api/tours-list) لدعم تجارب العميل السريعة وأدوات الإكمال التلقائي.

  • الأمان والموثوقية: تتبع الإعدادات الافتراضية أفضل ممارسات Laravel—تكوينات صارمة تعتمد على البيئة، نماذج محمية من CSRF، تحقق صارم من خلال طلبات النموذج (Form Requests)، ولوحة تحكم Filament لإدارة البيانات (CRUD) بشكل آمن. يتضمن المشروع اختبارات Pest وتنسيق الكود عبر Pint لضمان جودة الكود.

المعمارية التقنية ومكدس التكنولوجيا

  • الخلفية / واجهة برمجة التطبيقات (Backend / API)

    • الإطار: Laravel 12 (PHP ^8.2).
    • النمط: MVC + طبقة الخدمات. تشمل الخدمات الرئيسية FilterService و PricingService و CurrencyService (انظر app/Services).
    • الإدارة: Filament v5 لإدارة المحتوى وتجربة مستخدم آمنة.
    • قاعدة البيانات: علائقية (يوصى بـ Postgres). يتضمن المخطط product_filters غير الطبيعي لتسريع الاستعلامات متعددة الأوجه.
  • الواجهة الأمامية (Frontend)

    • الأدوات: Vite, Tailwind CSS v4.
    • المكونات: مكونات Blade قابلة لإعادة الاستخدام ونقاط نهاية تعتمد على JSON لواجهة المستخدم غير المتزامنة (البحث/الإكمال التلقائي).
    • طرف ثالث: Swiper للعروض التقديمية (Carousels).
  • تطوير العمليات والبنية التحتية (DevOps)

    • يتم توفير نصوص برمجية للمطور المحلي في composer.json (setup, dev, test).
    • CI: يستخدم المشروع Pest للاختبارات و Pint للتنسيق؛ تكامل في خطوط أنابيب CI لفرض بوابات الجودة.
    • التخزين المؤقت: يستخدم Laravel Cache (يوصى بـ Redis) لقوائم العملات والمرشحات المحسوبة.
    • الحاويات: يعمل داخل Docker عبر Laravel Sail أو وقت تشغيل PHP المفضل لديك.

مخطط المعمارية

graph LR
	A[متصفح المستخدم] -->|HTTP/HTTPS| B[Laravel Frontend (Blade + Vite)]
	B --> C[Routes/Controllers]
	C --> D[Service Layer]
	D -->|كتابة| E[جدول product_filters]
	D -->|قراءة/كتابة| F[المنتجات / التسعير / الرحلات]
	F --> G[Postgres]
	D --> H[CurrencyService Cache (Redis)]
	I[لوحة تحكم Filament] --> F

المميزات الرئيسية والتحليلات التقنية العميقة

  1. مرشحات المنتجات (بحث سريع متعدد الأوجه)
  • الميزة: مرشحات المنتجات المحسوبة مسبقاً والمخزنة في product_filters للسماح بتصفية فعالة عبر البلدان والوجهات والتصنيفات ونطاقات الأسعار والمدة.
  • التحدي: تشغيل الربط المخصص (ad-hoc joins) أو التجميعات الثقيلة عبر كتالوجات المنتجات الكبيرة والترجمات يتسبب في بطء تحميل الصفحات واستعلامات معقدة.
  • الحل الهندسي: تقوم FilterService::rebuildProductFilters() (انظر app/Services/FilterService.php) بتركيب صفوف مطبعة عند حفظ/تحديث المنتج وإدراجها في product_filters. يستخدم مسار القراءة منطق التقاطع (getProductIdsByFilters) لدمج معايير التصفية بكفاءة—هذا يحول عمليات البحث متعددة إلى كثير إلى استعلامات بسيطة مفهرسة ويقلل من ضغط قاعدة البيانات وقت التشغيل.
  1. التسعير والحجز (النطاقات الزمنية، المقصورات، سياسات الأطفال)
  • الميزة: حساب دقيق لعروض الأسعار عبر متغيرات التسعير (لكل شخص، لكل مقصورة)، والرحلات، وتجاوزات النطاق الزمني.
  • التحدي: تختلف قواعد التسعير حسب تاريخ السفر، أو أنواع المقصورات أو الغرف وسياسات خصم الأطفال، ويجب أن يعيد النظام عروض أسعار متسقة وقابلة للتدقيق.
  • الحل الهندسي: تقوم PricingService::calculateQuote() (انظر app/Services/PricingService.php) بحل الوحدة الأساسية الصحيحة عن طريق التحقق من أسعار الرحلات المحددة، وأسعار المقصورات، وصفوف التسعير المؤرخة، وأخيراً بدائل آمنة. يستخدم تسعير الأطفال childPolicyRules لحساب الخصومات حسب العمر؛ يتم تفويض تحويل العملة إلى CurrencyService ليكون مصدراً واحداً للحقيقة. يستخدم التنفيذ ترتيباً منطقياً (النطاق -> البديل -> تاريخ الإنشاء) لتحديد صف السعر الصحيح بشكل حتمي.
  1. التوجيه متعدد اللغات و SEO
  • الميزة: مسارات مترجمة مع روابط (slugs) مترجمة، روابط أساسية (canonical URLs)، ومرشحات تراعي اللغة.
  • التحدي: تقديم محتوى محلي صديق لـ SEO مع تجنب تعارضات التوجيه مع الروابط المحجوزة والحفاظ على التوافق مع الإصدارات السابقة.
  • الحل الهندسي: يتم تجميع المسارات وحمايتها باستخدام وسيط SetLocale ومجموعات بادئة مترجمة في routes/web.php. تستخدم مسارات المنتجات المتداخلة والتي تبدأ بالدولة استثناءات التعبير النمطي (regex) لتجنب اصطدامات الروابط المحجوزة. يتم تخزين الترجمات في جداول ترجمة لكل كيان وتتضمن صفوف التصفية الواعية للغة language_id بحيث تعرض مرشحات واجهة المستخدم الروابط ذات الصلة فقط للغة المحددة.