# GET /api/v2/online/accommodation/get_room_type_prices

## Route Info

<div id="bkmrk-method-endpoint-cont" style="direction: rtl; font-family: Vazir; text-align: justify; line-height: 1.9;"><table border="1" style="width: 98%; margin: auto; border-collapse: collapse; text-align: center;"><tbody><tr style="background: #efefef; font-weight: bold;"><td>Method</td><td>Endpoint</td><td>Controller</td><td>Middleware</td><td>Purpose</td></tr><tr><td>GET</td><td style="direction: ltr;">/api/v2/online/accommodation/get\_room\_type\_prices</td><td style="direction: ltr;">OnlineController@getRoomTypePrices</td><td style="direction: ltr;">authWithJwt</td><td>دریافت قیمت، ظرفیت و رفتاری اتاق‌ها برای یک اقامتگاه خاص</td></tr></tbody></table>

</div>## Logic

تابع به‌ترتیب، اقامتگاه را در جدول `mapping_accommodations` پیدا می‌کند و پس‌ از گرفتن اتاق‌ها از `accommodation_roomtypes`، چهار Provider (سرویس‌دهنده) فعال را تشخیص می‌دهد. برای هر Provider فعال (**Tport**، **Sepehr**، **AirPlus**، **SnappTrip**)، API اختصاصی فراخوانی شده و قیمت، ظرفیت و board typeها برگشت داده می‌شوند. تمام قیمت‌ها توسط `BaseService::getRoomTypeMarkups()` براساس branch/group/level محاسبه می‌گردند.

## Input

<div id="bkmrk-accommodation_id%E2%80%AF%28in" style="direction: rtl; font-family: Vazir; text-align: justify; line-height: 1.9;">- **accommodation\_id** (Integer) – شناسه اقامتگاه
- **checkin\_date / checkout\_date** (String) – تاریخ ورود و خروج
- **adults\_count** (Integer)
- **children\_count** (Integer)
- **branch, group, level** (درون JWT)

</div>## Response

```
{
  "Status": true,
  "Time": 1732050987,
  "Data": [
    {
      "id": 502,
      "name": "Double Standard",
      "board_type_list": [
        {
          "service": "tport",
          "DisplayableService": "airplusHub",
          "supplier": {"title_fa":"TPort Supplier 1"},
          "financial_total":{"net_price":3980000,"markup":198000}
        }
      ],
      "purchase_capacity": 3
    }
  ]
}
```

## Security

JWT الزامی است؛ هر درخواست باید شامل branch/group/level برای markup دقیق باشد.

## Dependencies

<div id="bkmrk-tportapi%3A%3Asendreques" style="direction: rtl; font-family: Vazir; text-align: justify; line-height: 1.9;">- `TportApi::sendRequestAccommodation()`
- `SepehrApi::sendRequestAccommodation()`
- `AirPlusApi::sendRequest()`
- `SnappTripApi::sendRequestAccommodation()`
- `BaseService::getRoomTypeMarkups()`
- `Redis` برای کش حداقل‌قیمت هر اقامتگاه → کلید `accommodations:min_price:{id}`

</div>## Performance

تعداد فراخوانی API تا ۴ عدد ممکن است. بهتر است در نسخه بعد با async موارد تجمیع (Parallel) شوند. پاسخ میانگین : ۲ – ۴ ثانیه

## Error Handling

```
{
 "Status": false,
 "Code": 1002,
 "Message": "No active provider data"
}
```

## Side Effects

هیچ تغییر داده‌ای در DB ندارد؛ صرفاً Read با write در cache Redis.

## Audit Trail

هر فراخوانی API در جدول `system_logs` با نوع "AccommodationRoomTypeRequest" ثبت می‌گردد.

## Improvement

<div id="bkmrk-%D8%A7%D9%81%D8%B2%D9%88%D8%AF%D9%86%E2%80%AF%D9%BE%D8%A7%D8%B1%D8%A7%D9%85%D8%AA%D8%B1%E2%80%AFcurre" style="direction: rtl; font-family: Vazir; text-align: justify; line-height: 1.9;">- افزودن پارامتر `currency` برای تبدیل قیمت.
- ایجاد threaded request برای سرویس‌های خارجی.
- cache تفکیکی براساس (اقامتگاه+تاریخ+branch).

</div>## Conclusion

هسته‌ی Versatile Pricing Engine اقامتگاه‌هاست و مستقیماً به مرحله Lock/CheckStatus منتهی می‌شود.

<div id="bkmrk-online-accommodation-roomtype-prices" style="direction: rtl; font-family: Vazir; text-align: justify; line-height: 1.9;"></div>