Skip to main content
#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 ترکیب می‌کند. مناسب برای فازهای جستجوی سریع و داشبورد مدیریتی است.