# نکات پیاده‌سازی — تسک ۰۹: ماژول تنظیمات نوبت‌دهی ## اولویت‌بندی تنظیمات (از Manual — بخش ۲.۸.۴) هنگام محاسبه اسلات‌های خالی (تسک ۱۰): ``` 1. DateOverride (بالاترین) → اگر Override فعال برای این تاریخ وجود دارد، تعطیلی نادیده گرفته می‌شود 2. Holiday → اگر تاریخ تعطیل است AND override ندارد → روز بسته است 3. WeeklySchedule (پایین) → در صورت نبود override و تعطیلی → برنامه هفتگی ``` ## UUID در URL endpoint لیست override ها مسیر `GET /api/v1/appointment-settings/date-override/list/{uuid}` → این `uuid` برابر است با UUID دکتر (نه DateOverride) ## ساختار واقعی هر session در weekly schedule (از Manual و API request) ```json { "active": 1, "number_of_turns": 10, ← تعداد نوبت (نه patient_limit!) "turn_time": 10, ← مدت هر نوبت به دقیقه (نه duration_per_patient!) "location": { "id": 48 }, ← آدرس مطب (object، نه فقط ID) "start_time": "10:00", "end_time": "13:00" } ``` ساختار کامل weekly schedule (7 روز — از "0"=شنبه تا "6"=جمعه): ```json { "0": { "morning": { "active": 1, "number_of_turns": 10, "turn_time": 10, "location": {"id": 48}, "start_time": "10:00", "end_time": "13:00" }, "evening": { "active": 0 } }, "1": { "morning": {"active": 0}, "evening": { "active": 1, ... } }, ... } ``` **مهم:** در DB backup، فیلدهای `patient_limit` و `duration_per_patient` استفاده شده بود. در API (کلاینت) از `number_of_turns` و `turn_time` استفاده می‌شود. در Symfony باید هر دو نام را پشتیبانی کنی یا از نام‌های API استفاده کنی. ## مهم: ذخیره‌سازی field_setting (از کد واقعی) ```php // در Drupal: $normalized['field_setting'] = json_encode($data['setting'][0]); // یعنی اولین المان آرایه‌ای که فرانت می‌فرستد ذخیره می‌شود // در Symfony هم همین رویکرد: $weeklySchedule->setSetting(json_encode($request->getSetting()[0])); ``` ## GET از UUID دکتر (نه UUID schedule) ```php // weeklyScheduleService.get($uuid) در Drupal: // 1. ابتدا دکتر با این uuid را پیدا کن → $doctorEntity // 2. سپس schedule با field_doctor_id = $doctorId را پیدا کن // در Symfony: $doctor = $this->doctorRepo->findByUuid($uuid); $schedule = $this->scheduleRepo->findByDoctor($doctor); ``` ## مجوزها تمام endpoint های این ماژول نیاز به احراز هویت دارند: ``` POST/PATCH/DELETE → دکتر مرتبط (owner) یا ROLE_ADMIN GET → دکتر مرتبط یا ROLE_ADMIN یا منشی دکتر ``` ## user_flow جریان کامل در فایل جداگانه user_flow.md توضیح داده شده است.