Skip to main content
#P1799

GET /b2c/v1/online/accommodation/get_room_type_prices

Get Room Type Prices

این اندپوینت کلیهٔ قیمت‌های مرتبط با نوع اتاق (RoomType) را از سرویس‌دهندگان مختلف واکشی و تجمیع می‌کند. پس از محاسبهٔ قیمت خالص (Net)، قیمت اصلی (Board)، و ماکاپ‌ها برای هر تأمین‌کننده، نتیجه‌ی مرتب‌شده و کمترین قیمت محاسبه‌شده در Redis ذخیره می‌شود. این ورودی، موتور قیمت‌گذاری اصلی صفحه هتل در B2C است.



Endpoint Info

URL: /b2c/v1/online/accommodation/get_room_type_prices
Method: GET
Controller: V1OnlineController@getRoomTypePrices
Service: LibBaseService::getRoomTypePrices
Auth: Public (No JWT Required)

Query Parameters

پارامتر نوع ضروری توضیح
accommodation_id integer شناسهٔ اقامتگاه در جدول hotels.
checkin_date string (YYYY-MM-DD) تاریخ ورود.
checkout_date string (YYYY-MM-DD) تاریخ خروج.
branch integer شناسه شعبه برای پردازش قیمت نهایی.
group integer شناسه گروه کاربری.
level integer سطح کاربری (برای تفکیک نرخ‌گذاری مارکاپ).
adults_count integer تعداد بزرگسال؛ فیلتر ظرفیت اتاق‌ها.
children_count integer تعداد کودک؛ فیلتر ظرفیت.

Logical Flow

درخواست دریافت می‌شود و مقدار accommodation_id از mapping_accommodations خوانده می‌شود.
RoomType Join
واکشی تمام رکوردهای accommodation_roomtypes با join روی mapping_roomtypes برای شناسه‌های تپورت، سپهر، ایرپلاس و اسنپ‌تریپ.
Activate Providers
بررسی فعال بودن اینترفیس‌های سرویس‌دهنده در جدول application_interface.
فعال‌های معمول: tport، sepehr_hotel، snapptrip_hotel، و AirPlus (همیشه فعال).
Tport Price Fetch
🔹 فراخوانی TportApi::get_hotel_room_price واکشی مالیات و قیمت هر روز → محاسبه‌ی تجمعی و markups از BaseService::getRoomTypeMarkups.
ذخیره در $room->board_type_list[].
Sepehr Prices
🔹 فراخوانی SepehrApi::search_by_city_and_date بر اساس IATA مقصد. واکشی RoomTypeList و RateDetailList. فیلتر + مارکاپ → ایجاد Financial array.
AirPlus Prices
🔹 فراخوانی AirPlusApi::search با نوع accommodation. محاسبه قیمت روزانه بزرگسال/کودک/تخت اضافه → ذخیره در فیلد financial_total.
بررسی ظرفیت در جدول‌های رزرو موقت از ReservationController::getAccommodationRooms().
SnappTrip Prices
🔹 فراخوانی SnappTripApi::get_hotel_availability. قیمت‌های نهایی بر اساس pricing.original_sell_price و تعداد روز اقامت محاسبه می‌شوند. ضرب در 10 برای تبدیل به ریال.
Sort + Cache
مرتب‌سازی بر اساس کمترین net_price از فیلد financial_total. ذخیرهٔ کمترین قیمت با کلید Redis accommodations:min_price:{id} و TTL تطبیقی.

Redis Cache Logic

درجهٔ هتل TTL (seconds) توضیح
rate = 5 21600 نرخ گذاری زیاد تغییر می‌کند.
rate = 4 43200 دورهٔ به‌روزرسانی متوسط.
rate = 3 172800 پایدار دو روزه؛ قیمت ثابت‌تر.
سایر 604800 هتل‌های کم‌تردد؛ TTL یک هفته.
قیمت صفر 43200 در صورت عدم دریافت نرخ معتبر.

Response Structure

کلید توضیح
Status true در صورت واکشی موفق.
Time تایم‌استمپ unix.
Data آرایه‌ای از RoomType‌ها؛ هر آیتم شامل جزئیات board_type_list، قیمت‌ها، و ظرفیت خرید.

نمونه خروجی موفق

{
  "Status": true,
  "Time": 1733744200,
  "Data": [
    {
      "id": 10502,
      "fa_title": "اتاق دوتخته فول برد",
      "purchase_capacity": 3,
      "board_type_list": [
        {
          "service": "airplus",
          "financial_total": {
            "board_price": 4860000,
            "net_price": 4500000,
            "markup": 0.07
          },
          "supplier": { "id": 28, "title_fa": "AirPlus Hub" }
        }
      ]
    }
  ]
}