فكرة المشروع
يهدف المشروع إلى بناء Backend يوفر API لإدارة الخدمات والحجوزات بطريقة منظمة وقابلة للتوسع.
يمكن للعميل استعراض الخدمات، اختيار الخدمة المناسبة، مشاهدة المواعيد المتاحة، ثم إنشاء حجز. وفي المقابل يستطيع مقدم الخدمة إدارة خدماته ومواعيده وحجوزاته.
تطبيق مفاهيم REST API وDjango REST Framework وقواعد البيانات والمصادقة والصلاحيات في سيناريو قريب من تطبيقات الخدمات والحجوزات الواقعية.
أهم مميزات النظام
👤 إدارة العملاء
إنشاء حسابات العملاء وإدارة معلوماتهم الأساسية.
🧑💼 مقدمو الخدمات
إدارة مقدمي الخدمات والخدمات التي يقدمونها.
🛎️ الخدمات
إنشاء الخدمات وتحديد بياناتها ومدتها وتكلفتها.
📅 الحجوزات
إنشاء الحجوزات ومتابعة حالتها وإدارتها.
⏰ المواعيد
التعامل مع المواعيد المتاحة لمقدمي الخدمات.
🔐 الصلاحيات
تحديد العمليات المسموحة لكل نوع من المستخدمين.
التقنيات المستخدمة
بنية المشروع
يمكن تقسيم النظام إلى تطبيقات منفصلة، بحيث يكون لكل تطبيق مسؤولية محددة.
booking_api/
│
├── manage.py
│
├── config/
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
│
├── users/
│ ├── models.py
│ ├── serializers.py
│ ├── views.py
│ └── urls.py
│
├── services/
│ ├── models.py
│ ├── serializers.py
│ ├── views.py
│ └── urls.py
│
├── bookings/
│ ├── models.py
│ ├── serializers.py
│ ├── views.py
│ └── urls.py
│
└── requirements.txt
هذا التنظيم يساعد على فصل منطق المستخدمين عن الخدمات والحجوزات، ويجعل المشروع أسهل في التطوير والاختبار.
تصميم قاعدة البيانات
يعتمد النظام على عدة كيانات مترابطة لتمثيل العملاء ومقدمي الخدمات والخدمات والحجوزات.
| الكيان | الغرض | العلاقة |
|---|---|---|
| User | حسابات المستخدمين | عميل أو مقدم خدمة |
| Service | بيانات الخدمة | مرتبطة بمقدم الخدمة |
| Availability | أوقات التوفر | مرتبطة بمقدم الخدمة |
| Booking | بيانات الحجز | عميل + خدمة + موعد |
API Endpoints
تم تصميم الـ API باستخدام أسلوب REST بحيث يكون لكل مورد مجموعة من العمليات الواضحة.
| Method | Endpoint | الوظيفة |
|---|---|---|
| GET | /api/services/ | عرض الخدمات |
| POST | /api/services/ | إضافة خدمة |
| GET | /api/services/{id}/ | تفاصيل خدمة |
| GET | /api/bookings/ | عرض الحجوزات |
| POST | /api/bookings/ | إنشاء حجز |
| PATCH | /api/bookings/{id}/ | تحديث الحجز |
| DELETE | /api/bookings/{id}/ | إلغاء الحجز |
منطق الحجز
من أهم الأجزاء في هذا النوع من الأنظمة التأكد من أن الموعد المطلوب متاح قبل إنشاء الحجز.
if not is_available(service, start_time):
return Response(
{
"detail": "الموعد غير متاح."
},
status=400
)
create_booking()
المثال السابق يوضح الفكرة العامة فقط، أما التطبيق الفعلي فيحتاج إلى معالجة أكثر دقة للتواريخ والمناطق الزمنية والتعارضات.
Serialization
يستخدم Django REST Framework Serializers لتحويل البيانات بين نماذج Python وJSON والعكس.
class ServiceSerializer(
serializers.ModelSerializer
):
class Meta:
model = Service
fields = [
"id",
"name",
"description",
"duration",
"price",
]
المصادقة والصلاحيات
لا يجب أن تكون جميع العمليات متاحة لجميع المستخدمين. لذلك يتم تقسيم الصلاحيات حسب نوع المستخدم والعملية المطلوبة.
- العميل يستطيع إنشاء وإدارة حجوزاته.
- مقدم الخدمة يستطيع إدارة خدماته.
- مقدم الخدمة يستطيع إدارة المواعيد المتاحة.
- المستخدم لا يستطيع تعديل حجز يخص مستخدمًا آخر.
- العمليات الإدارية محمية بصلاحيات خاصة.
التحقق من البيانات
يجب فحص البيانات القادمة من العميل قبل تنفيذ أي عملية حساسة.
- التأكد من وجود الخدمة.
- التأكد من صحة التاريخ والوقت.
- التأكد من توفر الموعد.
- منع إنشاء حجوزات متعارضة.
- التأكد من صلاحية المستخدم لتنفيذ العملية.
معالجة الأخطاء
يجب أن تكون استجابات الأخطاء واضحة ومتوافقة مع طبيعة الـ API.
{
"detail": "لا يمكن إنشاء الحجز لأن الموعد غير متاح."
}
استخدام Status Codes المناسبة يساعد العميل على معرفة نتيجة الطلب والتعامل معها بطريقة صحيحة.
الاختبارات
يمكن كتابة اختبارات تغطي أهم السيناريوهات الخاصة بالخدمات والحجوزات.
- اختبار إنشاء خدمة.
- اختبار عرض الخدمات.
- اختبار إنشاء حجز صحيح.
- اختبار حجز موعد غير متاح.
- اختبار الصلاحيات.
- اختبار إلغاء الحجز.
دورة عملية الحجز
اختيار الخدمة
العميل يستعرض الخدمات المتاحة.
اختيار الموعد
النظام يعرض المواعيد المتاحة.
إنشاء الحجز
يتم التحقق من البيانات ثم إنشاء الحجز.
تحديث الحالة
تتم متابعة الحجز حتى إتمامه أو إلغائه.
الأمان
لأن النظام يتعامل مع حسابات وبيانات وحجوزات، يجب مراعاة مجموعة من ممارسات الأمان.
- حماية الـ API بالمصادقة المناسبة.
- تطبيق الصلاحيات على مستوى الموارد.
- عدم الثقة بالبيانات القادمة من العميل.
- عدم تخزين الأسرار داخل Git.
- استخدام HTTPS في بيئة الإنتاج.
المفاهيم التي يوضحها المشروع
REST
تصميم API واضحة تعتمد على الموارد والـ HTTP Methods.
DRF
بناء API باستخدام Django REST Framework.
Database
تصميم العلاقات بين المستخدمين والخدمات والحجوزات.
Business Logic
تطبيق قواعد العمل مثل منع تعارض الحجوزات.
حالة المشروع
هذا المشروع نموذج تجريبي ضمن معرض الأعمال، ويمكن استبدال محتواه لاحقًا بمشروع حقيقي وإضافة رابط GitHub أو Demo وصور حقيقية.