Skip to main content
#P1105

Function getAccommodationRooms

·  هدف:

این متد برای واکشی و نمایش وضعیت اتاق‌های یک چارتر اقامتی در یک بازه زمانی مشخص طراحی شده است. هدف اصلی آن، ارائه یک نمای گرافیکی یا جدولی از در دسترس بودن اتاق‌ها در طول زمان است. متد ابتدا یک دوره زمانی (CarbonPeriod) بین تاریخ شروع و پایان ورودی ایجاد می‌کند. سپس، برای هر اتاق (room_id) مربوط به چارتر، وضعیت رزرو آن را در هر روز از دوره زمانی مشخص شده بررسی می‌کند. برای هر روز، وضعیت اتاق می‌تواند یکی از سه حالت باشد: available (آزاد)، unavailable (مثلاً برای تعمیرات)، یا reserved (رزرو شده). در حالت reserved، اطلاعات رزرو مربوطه نیز به خروجی ضمیمه می‌شود. این ساختار داده خروجی برای رندر کردن تقویم وضعیت اتاق‌ها در فرانت‌اند بسیار مناسب است.

ویژگی‌ها توضیحات
هدف کلی نمایش وضعیت روزانه اتاق‌های یک هتل در یک بازه زمانی.
پردازش زمانی ایجاد یک دوره زمانی روزانه با CarbonPeriod.
بررسی وضعیت ایجاد یک دوره زمانی روزانه با CarbonPeriod.
واکشی اطلاعات رزرو در صورت رزرو بودن، جزئیات رزرو را از دیتابیس استعلام می‌کند.
بهینه‌سازی تولید یک ساختار داده تودرتو (اتاق -> روز -> وضعیت) برای نمایش آسان.
بهینه‌سازی واکشی تمام اتاق‌ها و رزروهای مرتبط در ابتدای کار برای کاهش تعداد کوئری‌ها در حلقه.

·     ورودی‌ها (پارامتر‌ها):

 

توضیحات موقعیت نوع داده نام پارمتر
شناسه چارتر اقامتی. Route integer $request->id
تاریخ شروع بازه زمانی (مثلاً 2025-10-01). Query string (date) $request->from
تاریخ پایان بازه زمانی (مثلاً 2025-10-31). Query string (date) $request->to

·     خروجی (Return):

 

توضیحات نوع داده
یک آبجکت JSON با کلید payload که آرایه‌ای از آبجکت‌های اتاق است. هر آبجکت اتاق شامل اطلاعات اتاق و یک کلید dates است که وضعیت اتاق را در هر روز از بازه زمانی نشان می‌دهد. Illuminate\Http\JsonResponse
در صورت بروز خطا، یک پاسخ با کد 400 Bad Request. Illuminate\Http\JsonResponse

·  مثال استفاده / سناریو:

سناریو: مشاهده وضعیت اتاق‌های هتل در ماه اکتبر

  • Request URL: /api/panel/v2/charter/620/accommodation/rooms?from=2025-10-01&to=2025-10-31
  • Action:
  1. یک CarbonPeriod از اول تا آخر اکتبر ایجاد می‌شود.
  2. تمام اتاق‌های چارتر ۶۲۰ و تمام رزروهای آن در این بازه واکشی می‌شوند.
  3. برای هر اتاق، متد روی تمام روزهای اکتبر حلقه می‌زند.
  4. برای هر روز، بررسی می‌کند که آیا رزروی آن روز را پوشش می‌دهد یا خیر.
  • Response:
  • HTTP Status: 200 OK
  • Body:
json
        {
            "payload": [
                {
                    "room_id": 201, "number": "101", ...,
                    "dates": {
                        "2025-10-15": { "status": "available" },
                        "2025-10-16": { "status": "reserved", "reservation": {...} },
                        "2025-10-17": { "status": "reserved", "reservation": {...} },
                        // ...
                    }
                }
            ],
            "meta": { "timestamp": ... }
        }