#P1488
POST /api/v2/accommodations/list
Route Info
| Method | Endpoint | Controller | Purpose |
| POST | /api/v2/accommodations/list | V2BaseController@accommodationsList | نمایش فهرست اقامتگاهها با فیلتر و صفحهبندی پویا. |
منطق عملکرد
درون تابع accommodationsList() ابتدا ورودی JSON دیکد میشود. سپس براساس فیلدهای advanced شامل کشور، استان، شهر، رتبه یا عبارت جستجو، فیلترینگ انجام میگیرد. نتایج از جدول hotels واکشی شده و با دادههای Redis (کش کشور، همکار، لوگو و موقعیت جغرافیایی) ترکیب میشود.
ورودیها
{
"json": "{\"start\":0,\"length\":20,\"advanced\":{\"country\":12,\"city\":5,\"rate\":4,\"r\":\"تهران\"}}"
}
خروجی
{
"items": [
{"id":100,"title":"Espinas Palace","title_fa":"هتل اسپیناس پالاس","rate":5,"country":"ایران","city":"تهران"}
],
"meta":{"timestamp":1750669255,"draw":1,"recordsTotal":1240,"recordsFiltered":20}
}
امنیت
- مسیر نیاز به احراز JWT دارد.
- فیلتر شعبه براساس توکن کاربر قابلافزودن است.
کارایی
- بهینهسازی با
paginate()، ایندکس روی فیلدهای city و country. - کش Redis TTL=1800s برای کشورها و شهرها.
- محاسبه اولیه
drawبرای درخواست صفحهبندی.
وابستگیها
- use Illuminate\Support\Facades\DB;
- use Illuminate\Support\Facades\Redis;
- use App\Models\Media;
خطاها
| کد | شرح |
| 400 | ورودی JSON نامعتبر. |
| 404 | اقامتگاهی مطابق فیلتر یافت نشد. |
پیشنهاد امنیتی
- افزودن نقش
AccommodationViewer. - اجرای
rate limitingبر اساس IP.
پیشنهاد عملکردی
- افزودن پارامترهای
sort_byوfilter_range. - ارسال meta شامل واحد ارز (مثلاً IRR) در پاسخ.
ممیزی
نوع لاگ: ReadAccommodationList. سطح لاگ: Info.
جمعبندی
این مسیر برای لیستگیری پویا از اقامتگاهها طراحی شده و دادهها را از PostgreSQL و Redis ترکیب میکند. مناسب برای فازهای جستجوی سریع و داشبورد مدیریتی است.