#P1463
GET /api/v2/online/accommodation/get_room_type_prices
Route Info
| Method | Endpoint | Controller | Middleware | Purpose |
| GET | /api/v2/online/accommodation/get_room_type_prices | OnlineController@getRoomTypePrices | authWithJwt | دریافت قیمت، ظرفیت و رفتاری اتاقها برای یک اقامتگاه خاص |
Logic
تابع بهترتیب، اقامتگاه را در جدول mapping_accommodations پیدا میکند و پس از گرفتن اتاقها از accommodation_roomtypes، چهار Provider (سرویسدهنده) فعال را تشخیص میدهد. برای هر Provider فعال (Tport، Sepehr، AirPlus، SnappTrip)، API اختصاصی فراخوانی شده و قیمت، ظرفیت و board typeها برگشت داده میشوند. تمام قیمتها توسط BaseService::getRoomTypeMarkups() براساس branch/group/level محاسبه میگردند.
Input
- accommodation_id (Integer) – شناسه اقامتگاه
- checkin_date / checkout_date (String) – تاریخ ورود و خروج
- adults_count (Integer)
- children_count (Integer)
- branch, group, level (درون JWT)
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
TportApi::sendRequestAccommodation()SepehrApi::sendRequestAccommodation()AirPlusApi::sendRequest()SnappTripApi::sendRequestAccommodation()BaseService::getRoomTypeMarkups()Redisبرای کش حداقلقیمت هر اقامتگاه → کلیدaccommodations:min_price:{id}
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
- افزودن پارامتر
currencyبرای تبدیل قیمت. - ایجاد threaded request برای سرویسهای خارجی.
- cache تفکیکی براساس (اقامتگاه+تاریخ+branch).
Conclusion
هستهی Versatile Pricing Engine اقامتگاههاست و مستقیماً به مرحله Lock/CheckStatus منتهی میشود.