#P1798
GET /b2c/v1/online/accommodation/get_min_prices
Get Accommodation Minimum Prices
این اندپوینت حداقل قیمت (Minimum Price) اقامتگاهها را در بازهای از تاریخ ارائه میدهد. دادهها از چند سرویس خارجی شامل AirPlus، Sepehr، Tport و SnappTrip واکشی میشوند. نتایج هر اقامتگاه بهصورت cache شده در Redis با TTL دینامیک نگهداری میشود تا بار API کاهش پیدا کند.
Endpoint Info
URL:
/b2c/v1/online/accommodation/get_min_pricesMethod: GET
Controller:
V1OnlineController@getAccommodationMinPricesService:
LibBaseService::getAccommodationMinPricesAuth: Public (No JWT Required)
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| checkin_date | string (YYYY-MM-DD) | ✅ | تاریخ ورود به اقامتگاه. |
| checkout_date | string (YYYY-MM-DD) | ✅ | تاریخ خروج از اقامتگاه. |
| branch | integer | ✅ | شناسهی شعبه برای context فراخوانی AirPlus API. |
| accommodations[] | array of integers | ✅ | لیست شناسههای اقامتگاههایی که باید نرخ حداقلشان محاسبه شود. |
Response Structure
| Key | Description |
|---|---|
| Status | وضعیت درخواست، true در صورت موفقیت |
| Time | زمان پاسخ UNIX timestamp |
| Data | آبجکتی از اقامتگاهها که کلید آن ID اقامتگاه است. برای هر مورد، `min_price` و `min_original_price` بر اساس مجموع روزهای اقامت محاسبه شده است. |
Example Response (Success)
{
"Status": true,
"Time": 1733743200,
"Data": {
"2137": {
"id": 2137,
"min_price": 4800000,
"min_original_price": 5500000
},
"2652": {
"id": 2652,
"min_price": 3600000,
"min_original_price": 4100000
}
}
}
Example Response (Error)
{
"status": false,
"time": 1733743300,
"error": {
"code": 1002,
"message": "Invalid accommodations parameter.",
"trace": [ ... ]
},
"support": {
"phone": "021-91016838 in 121",
"email": "ict@airplus.app",
"panel": "helpdesk.airplus.app"
}
}
Logic Flow
درخواست chứa query شامل checkin_date، checkout_date، branch و IDs
↓
Normalize Dates
محاسبه تعداد روز اقامت (diff)، همچنین تولید تاریخهای
محاسبه تعداد روز اقامت (diff)، همچنین تولید تاریخهای
next Tuesday → next Wednesday برای تست قیمتها.↓
Determine Active Providers
بررسی وضعیت APIهای فعال در جدول
بررسی وضعیت APIهای فعال در جدول
application_interface برای سرویسهای tport، sepehr_hotel، snapptrip_hotel.↓
Iterate accommodations
برای هر شناسه اقامتگاه → بررسی cache Redis. در نبود cache، شروع واکشی از همه providerها.
برای هر شناسه اقامتگاه → بررسی cache Redis. در نبود cache، شروع واکشی از همه providerها.
↓
External API Calls
- TportApi::get_hotel_room_price: بر اساس mapped id و بازه تاریخی.
- SepehrApi::search_by_city_and_date: بر اساس IATA شهر یا استان.
- AirPlusApi::search: منبع داخلی hub.
- SnappTripApi::get_hotel_availability_calendar.
↓
Compute Min Prices
محاسبه کمترین مقدار نهایی و اصل بین همه نتایج موجود
محاسبه کمترین مقدار نهایی و اصل بین همه نتایج موجود
minNetPrice = min(Tport, Sepehr, AirPlus, SnappTrip)↓
Cache to Redis
کلید
کلید
accommodations:min_price:{id} با TTL وابسته به درجه هتل (۵ستاره تا ۷روزه)↓
Return JSON Result
لیست اقامتگاهها با فیلدهای
لیست اقامتگاهها با فیلدهای
min_price و min_original_price ضربدر تعداد روزها.Expiration (Redis TTL Rules)
| Hotel Rating | Expiration (seconds) | Comment |
|---|---|---|
| 5 stars | 21600 (6 hours) | High-traffic, frequent updates |
| 4 stars | 43200 (12 hours) | Medium update cycle |
| 3 stars | 172800 (2 days) | Stable pricing |
| Others | 604800 (7 days) | Low-traffic accommodation |
| No price (fallback) | 86400 (1 day) | در صورت عدم دریافت قیمت فعال از سرویس |