# سيناريو اختبار المشروع - نظام إدارة الحضانات والمدارس

> جميع الـ Endpoints تبدأ بـ `http://localhost:8000/api`
> استخدم `Authorization: Bearer {token}` للطلبات التي تتطلب توثيق

---

## 1. ADMIN - المدير

### 1.1 تسجيل الدخول كـ Admin

```
POST /auth/login
Body: { "login": "admin@example.com", "password": "password" }
→ احفظ الـ token المستلم
```

### 1.2 إدارة المستخدمين (Users)

**إنشاء مستخدم (معلم)**
```
POST /admin/users
Body: {
  "name": "أحمد علي",
  "email": "teacher1@example.com",
  "phone": "0500000001",
  "password": "password123",
  "password_confirmation": "password123",
  "role": "teacher",
  "status": 1
}
```

**إنشاء مستخدم (ولي أمر)**
```
POST /admin/users
Body: {
  "name": "خالد أحمد",
  "email": "parent1@example.com",
  "phone": "0500000002",
  "password": "password123",
  "password_confirmation": "password123",
  "role": "parent",
  "status": 1
}
```

**إنشاء مستخدم (ولي أمر آخر)**
```
POST /admin/users
Body: {
  "name": "سارة محمد",
  "email": "parent2@example.com",
  "phone": "0500000003",
  "password": "password123",
  "password_confirmation": "password123",
  "role": "parent",
  "status": 1
}
```

**عرض قائمة المستخدمين (مع فلترة حسب الدور)**
```
GET /admin/users?role=teacher&per_page=10
GET /admin/users?role=parent&per_page=10
GET /admin/users?is_active=true
```

**عرض مستخدم محدد**
```
GET /admin/users/{user_id}
```

**تعديل مستخدم**
```
PUT /admin/users/{user_id}
Body: { "name": "أحمد علي المحدث", "phone": "0500000111" }
```

**تغيير حالة المستخدم**
```
POST /admin/users/{user_id}/change-status
Body: { "status": 0 }
// 0=Inactive, 1=Active, 2=Pending, 3=Banned
```

**تعيين دور لمستخدم**
```
POST /admin/users/{user_id}/assign-role
Body: { "role": "teacher" }
```

**حذف مستخدم**
```
DELETE /admin/users/{user_id}
```

### 1.3 إدارة الصلاحيات والأدوار

**عرض شجرة الصلاحيات**
```
GET /admin/permissions
```

**عرض الأدوار**
```
GET /admin/permissions/roles
```

**عرض صلاحيات دور محدد**
```
GET /admin/permissions/roles/{role_id}
```

**مزامنة صلاحيات الدور**
```
POST /admin/permissions/roles/{role_id}/sync
Body: { "permissions": [1, 2, 3, ...] }  // array of permission IDs
```

**عرض صلاحيات مستخدم محدد**
```
GET /admin/users/{user_id}/permissions
```

### 1.4 إدارة الصفوف (Classes)

**إنشاء صف**
```
POST /admin/classes
Body: {
  "name": "الأول الابتدائي - أ",
  "grade": "1",
  "age_min": 6,
  "age_max": 7,
  "has_nap_time": true,
  "nap_start_time": "12:00",
  "nap_end_time": "13:00",
  "academic_year": "2025/2026"
}
```

**إنشاء صف آخر**
```
POST /admin/classes
Body: {
  "name": "الأول الابتدائي - ب",
  "grade": "1",
  "age_min": 6,
  "age_max": 7,
  "has_nap_time": true,
  "nap_start_time": "12:00",
  "nap_end_time": "13:00",
  "academic_year": "2025/2026"
}
```

**عرض قائمة الصفوف**
```
GET /admin/classes
```

**عرض صف محدد**
```
GET /admin/classes/{class_id}
```

**تعديل صف**
```
PUT /admin/classes/{class_id}
Body: { "name": "الأول الابتدائي - أ (محدث)", "is_active": true }
```

**حذف صف**
```
DELETE /admin/classes/{class_id}
```

### 1.5 إدارة الطلاب

**إنشاء طالب (مع ربطه بولي أمر)**
```
POST /admin/students
Body: {
  "first_name": "ياسين",
  "last_name": "خالد",
  "birth_date": "2019-05-15",
  "gender": "male",
  "class_id": 1,
  "enrollment_date": "2025-09-01",
  "parent_id": 2,
  "relationship": "father",
  "is_primary": true
}
```
> parent_id هنا هو ID ولي الأمر الذي أنشأته سابقاً

**إنشاء طالب ثانٍ**
```
POST /admin/students
Body: {
  "first_name": "ليلى",
  "last_name": "خالد",
  "birth_date": "2020-03-10",
  "gender": "female",
  "class_id": 1,
  "enrollment_date": "2025-09-01",
  "parent_id": 2,
  "relationship": "father",
  "is_primary": false
}
```

**إنشاء طالب ثالث (لولي الأمر الآخر)**
```
POST /admin/students
Body: {
  "first_name": "محمد",
  "last_name": "سارة",
  "birth_date": "2018-11-20",
  "gender": "male",
  "class_id": 2,
  "enrollment_date": "2025-09-01",
  "parent_id": 3,
  "relationship": "mother",
  "is_primary": true
}
```

**عرض قائمة الطلاب (مع فلترة)**
```
GET /admin/students
GET /admin/students?class_id=1
GET /admin/students?status=active
```

**عرض طالب محدد**
```
GET /admin/students/{student_id}
```

**تعديل طالب**
```
PUT /admin/students/{student_id}
Body: { "first_name": "ياسين", "notes": "طالب مجتهد" }
```

**إضافة ولي أمر لطالب**
```
POST /admin/students/{student_id}/parents
Body: {
  "parent_id": 3,
  "relationship": "mother",
  "is_primary": false,
  "receives_notifications": true
}
```

**إزالة ولي أمر من طالب**
```
DELETE /admin/students/{student_id}/parents/{parent_id}
```

**حذف طالب**
```
DELETE /admin/students/{student_id}
```

### 1.6 إدارة الوجبات (Meals)

**إنشاء وجبة**
```
POST /admin/meals
Body: { "name": "فطور", "type": "breakfast" }
```

**إنشاء وجبة أخرى**
```
POST /admin/meals
Body: { "name": "غداء", "type": "lunch" }
```

**عرض الوجبات**
```
GET /admin/meals
```

**تحديث وجبة**
```
PUT /admin/meals/{meal_id}
Body: { "name": "وجبة خفيفة", "type": "snack" }
```

**حذف وجبة**
```
DELETE /admin/meals/{meal_id}
```

### 1.7 إدارة خطط الوجبات (Meal Plans)

**إنشاء خطة وجبات لليوم**
```
POST /admin/meal-plans
Body: {
  "meal_id": 1,
  "date": "2026-06-11",
  "description": "فطور: بيض وجبن وخبز"
}
```

**عرض خطط الوجبات**
```
GET /admin/meal-plans
```

**تحديث خطة وجبة**
```
PUT /admin/meal-plans/{meal_plan_id}
Body: { "description": "فطور: شوفان وفواكه" }
```

**حذف خطة وجبة**
```
DELETE /admin/meal-plans/{meal_plan_id}
```

### 1.8 الإعلانات (Announcements)

**إنشاء إعلان عام للجميع**
```
POST /admin/announcements
Body: {
  "title": "عطلة نهاية الأسبوع",
  "body": "سيتم تعطيل الدوام يوم الأحد بمناسبة العيد",
  "scope": "all",
  "expires_at": "2026-07-01T00:00:00Z"
}
```

**إنشاء إعلان لصف محدد**
```
POST /admin/announcements
Body: {
  "title": "رحلة مدرسية",
  "body": "سنذهب في رحلة إلى الحديقة يوم الخميس",
  "scope": "class",
  "target_class_id": 1,
  "expires_at": "2026-06-20T00:00:00Z"
}
```

**إنشاء إعلان لشخص محدد (ولي أمر)**
```
POST /admin/announcements
Body: {
  "title": "مستوى الطالب",
  "body": "يسرنا إعلامكم بتقدم مستوى الطالب",
  "scope": "individual",
  "target_user_id": 2,
  "expires_at": "2026-06-20T00:00:00Z"
}
```

**حذف إعلان**
```
DELETE /admin/announcements/{announcement_id}
```

### 1.9 إرسال إشعار عام
```
POST /admin/notifications/send
Body: {
  "title": "تنبيه مهم",
  "body": "يرجى تحديث البيانات الشخصية",
  "user_ids": [1, 2, 3],
  "send_sms": false
}
```

### 1.10 الإعدادات (Settings)

**عرض كل الإعدادات**
```
GET /admin/settings
```

**عرض إعداد محدد**
```
GET /admin/settings/{setting_id}
```

**تحديث إعداد**
```
PUT /admin/settings/{setting_id}
Body: { "value": "new_value" }
```

### 1.11 التقارير

**تقرير الحضور**
```
GET /admin/reports/attendance?from=2026-06-01&to=2026-06-11
```

**تقرير الوجبات**
```
GET /admin/reports/meals?from=2026-06-01&to=2026-06-11
```

**تقرير النوم**
```
GET /admin/reports/sleep?from=2026-06-01&to=2026-06-11
```

### 1.12 عرض صلاحياتي
```
GET /me/permissions
```

---

## 2. TEACHER - المعلم

### 2.1 تسجيل الدخول كـ Teacher
```
POST /auth/login
Body: { "login": "teacher1@example.com", "password": "password123" }
→ احفظ الـ token المستلم
```

### 2.2 عرض الطلاب
```
GET /students
GET /students?class_id=1
```

### 2.3 عرض طالب محدد
```
GET /students/{student_id}
```

### 2.4 تسجيل الحضور (فردي)
```
POST /attendance
Body: {
  "student_id": 1,
  "date": "2026-06-11",
  "status": "present",
  "arrival_time": "08:00"
}
```
> status: present, absent, late, left_early

**تسجيل حضور طالب آخر**
```
POST /attendance
Body: {
  "student_id": 2,
  "date": "2026-06-11",
  "status": "present",
  "arrival_time": "08:15"
}
```

### 2.5 تسجيل الحضور (جماعي)
```
POST /attendance/bulk
Body: {
  "class_id": 1,
  "date": "2026-06-11",
  "records": [
    { "student_id": 1, "status": "present", "arrival_time": "08:00" },
    { "student_id": 2, "status": "late", "arrival_time": "08:45" }
  ]
}
```

### 2.6 عرض حضور طالب
```
GET /students/{student_id}/attendance?from=2026-06-01&to=2026-06-11
```

### 2.7 تسجيل الأنشطة (Activities)

**إنشاء نشاط**
```
POST /activities
Body: {
  "title": "رسم وتلوين",
  "description": "نشاط فني لتنمية المهارات الحركية الدقيقة",
  "objective": "تنمية الإبداع",
  "class_id": 1,
  "date": "2026-06-11",
  "type": "ad_hoc"
}
```
> type: scheduled, ad_hoc

### 2.8 عرض أنشطة طالب
```
GET /students/{student_id}/activities?from=2026-06-01&to=2026-06-11
```

### 2.9 عرض جداول الصف
```
GET /classes/{class_id}/schedules
```

### 2.10 تسجيل الوجبات (فردي)
```
POST /meal-records
Body: {
  "student_id": 1,
  "meal_id": 1,
  "date": "2026-06-11",
  "status": "all",
  "notes": "أكل جيداً"
}
```
> status: all, little, none, good_appetite, with_help

### 2.11 تسجيل الوجبات (جماعي)
```
POST /meal-records/bulk
Body: {
  "class_id": 1,
  "date": "2026-06-11",
  "meal_id": 1,
  "records": [
    { "student_id": 1, "status": "all", "notes": "" },
    { "student_id": 2, "status": "little", "notes": "لم يعجبه الطعام" }
  ]
}
```

### 2.12 عرض خطة الوجبات
```
GET /meal-plans?date=2026-06-11
```

### 2.13 عرض سجل وجبات طالب
```
GET /students/{student_id}/meal-records?date=2026-06-11
```

### 2.14 تسجيل النوم (فردي)
```
POST /sleep-records
Body: {
  "student_id": 1,
  "date": "2026-06-11",
  "status": "slept",
  "duration": 60,
  "notes": "نام جيداً"
}
```
> status: slept, not_slept, rested_only

### 2.15 تسجيل النوم (جماعي)
```
POST /sleep-records/bulk
Body: {
  "class_id": 1,
  "date": "2026-06-11",
  "records": [
    { "student_id": 1, "status": "slept", "duration": 60 },
    { "student_id": 2, "status": "not_slept", "duration": 0 }
  ]
}
```

### 2.16 عرض سجل نوم طالب
```
GET /students/{student_id}/sleep-records?from=2026-06-01&to=2026-06-11
```

### 2.17 إدارة الحساسية (Allergies)

**إضافة حساسية لطالب**
```
POST /allergies
Body: {
  "student_id": 1,
  "name": "حليب",
  "type": "طعام",
  "severity": "high",
  "notes": "يسبب طفح جلدي"
}
```

**عرض حساسية**
```
GET /allergies/{allergen_id}
```

**تحديث حساسية**
```
PUT /allergies/{allergen_id}
Body: { "severity": "medium" }
```

**عرض حساسية طالب**
```
GET /students/{student_id}/allergies
```

**حذف حساسية**
```
DELETE /allergies/{allergen_id}
```

### 2.18 عرض الإعلانات
```
GET /announcements?scope=all
GET /announcements?scope=class&class_id=1
```

### 2.19 تنبيهات الاستلام (Pickup Alerts)

**عرض تنبيهات الاستلام**
```
GET /pickup/alerts?class_id=1&status=pending
```

**تأكيد استلام الطالب**
```
POST /pickup/notify
Body: { "student_id": 1, "estimated_minutes": "at_gate" }
```

**إلغاء تنبيه استلام**
```
POST /pickup/{pickup_alert_id}/cancel
```

### 2.20 Push Token
```
POST /push-tokens
Body: { "token": "expo-xxx", "platform": "android" }
```
> platform: android, ios

---

## 3. PARENT - ولي الأمر

### 3.1 تسجيل الدخول كـ Parent (ولي الأمر الأول)
```
POST /auth/login
Body: { "login": "parent1@example.com", "password": "password123" }
→ احفظ الـ token المستلم
```

### 3.2 عرض أبنائي
```
GET /students
```

### 3.3 عرض بيانات ابن محدد
```
GET /students/{student_id}
```

### 3.4 تقارير الحضور لابني
```
GET /students/{student_id}/reports/attendance?from=2026-06-01&to=2026-06-11
GET /students/{student_id}/attendance?from=2026-06-01&to=2026-06-11
```

### 3.5 تقارير الوجبات لابني
```
GET /students/{student_id}/reports/meals?from=2026-06-01&to=2026-06-11
GET /students/{student_id}/meal-records?date=2026-06-11
```

### 3.6 تقارير النوم لابني
```
GET /students/{student_id}/reports/sleep?from=2026-06-01&to=2026-06-11
GET /students/{student_id}/sleep-records?from=2026-06-01&to=2026-06-11
```

### 3.7 عرض أنشطة ابني
```
GET /students/{student_id}/activities?from=2026-06-01&to=2026-06-11
```

### 3.8 عرض حساسية ابني
```
GET /students/{student_id}/allergies
```

### 3.9 عرض الإعلانات
```
GET /announcements
```

### 3.10 تحديد قراءة الإعلان
```
POST /announcements/{announcement_id}/read
```

### 3.11 إرسال تنبيه استلام
```
POST /pickup/notify
Body: { "student_id": 1, "estimated_minutes": "10" }
```
> estimated_minutes: 5, 10, 15, at_gate

### 3.12 إلغاء تنبيه استلام
```
POST /pickup/{pickup_alert_id}/cancel
```

### 3.13 عرض تنبيهات الاستلام الخاصة بي
```
GET /pickup/alerts?status=pending
```

### 3.14 Push Token
```
POST /push-tokens
Body: { "token": "expo-yyy", "platform": "ios" }
```

---

## 4. تسلسل اختبار شامل (Full Flow)

للحصول على تجربة اختبار كاملة، اتبع هذا التسلسل:

### المرحلة 1: إعدادات Admin
```
1. POST /auth/login (admin)
2. POST /admin/users ← إنشاء teacher
3. POST /admin/users ← إنشاء parent1
4. POST /admin/users ← إنشاء parent2
5. POST /admin/classes ← إنشاء class A
6. POST /admin/classes ← إنشاء class B
7. POST /admin/students ← إنشاء student1 (تابع لـ parent1)
8. POST /admin/students ← إنشاء student2 (تابع لـ parent1)
9. POST /admin/students ← إنشاء student3 (تابع لـ parent2)
10. POST /admin/meals ← إنشاء breakfast
11. POST /admin/meals ← إنشاء lunch
12. POST /admin/meal-plans ← خطة وجبات لليوم
```

### المرحلة 2: عمل المعلم
```
13. POST /auth/login (teacher)
14. POST /attendance/bulk ← تسجيل حضور الصف
15. POST /activities ← إنشاء نشاط
16. POST /meal-records/bulk ← تسجيل وجبات الصف
17. POST /sleep-records/bulk ← تسجيل نوم الصف
18. POST /allergies ← إضافة حساسية للطالب
```

### المرحلة 3: متابعة ولي الأمر
```
19. POST /auth/login (parent1)
20. GET /students ← عرض الأبناء
21. GET /students/{id}/reports/attendance ← تقرير الحضور
22. GET /students/{id}/reports/meals ← تقرير الوجبات
23. GET /students/{id}/reports/sleep ← تقرير النوم
24. GET /students/{id}/activities ← عرض الأنشطة
25. GET /students/{id}/allergies ← عرض الحساسية
26. POST /pickup/notify ← إرسال تنبيه استلام
```

### المرحلة 4: إعلانات Admin
```
27. POST /auth/login (admin)
28. POST /admin/announcements ← إعلان عام
29. POST /admin/announcements ← إعلان لصف
```

### المرحلة 5: عرض الإعلانات
```
30. POST /auth/login (parent1)
31. GET /announcements ← عرض الإعلانات
32. POST /announcements/{id}/read ← تحديد قراءة
```

---

## Headers المطلوبة لجميع الطلبات (عدا تسجيل الدخول)
```
Accept: application/json
Content-Type: application/json
Authorization: Bearer {your_token}
```
