Skip to main content
#P1685

GET /v2/charter/warranty

Charter: List Warranties

این اندپوینت برای بازیابی لیستی کامل از تمام گارانتی‌های مرتبط با یک چارتر مشخص (main_id) استفاده می‌شود. به ازای هر گارانتی، اطلاعات تکمیلی شامل جزئیات گارانتی‌کننده (همکار) و لیست اتاق‌های اختصاص‌داده‌شده (برای چارترهای اقامتگاهی) نیز بازگردانده می‌شود. این اندپوینت از یک مکانیزم کش (Caching) با استفاده از Redis برای بهینه‌سازی و افزایش سرعت دریافت اطلاعات همکاران بهره می‌برد.

Request Overview

URL: /v2/charter/warranty
Method: GET
Controller: CharterController@listWarrantyCharter
Middleware Stack: authWithJwt

Access Control

  • دسترسی معتبر JWT

Request Parameters (Query String)

این اندپوینت اطلاعات مورد نیاز خود را از طریق Query String دریافت می‌کند.

Parameter Type Description
id integer (الزامی) شناسه اصلی چارتر (charter_main.id) که گارانتی‌های آن باید لیست شوند.

Example Request

GET /v2/charter/warranty?id=451

Logic Details

فرآیند پردازش درخواست به شرح زیر است:

  1. واکشی گارانتی‌های اصلی:
    • ابتدا تمام رکوردها از جدول charter_warranties که main_id آن‌ها با id ارسال شده در درخواست برابر است، واکشی می‌شوند.
    • نتایج بر اساس id به صورت نزولی (DESC) مرتب می‌شوند تا جدیدترین گارانتی‌ها در ابتدای لیست قرار گیرند.
  2. پردازش و غنی‌سازی هر گارانتی (Mapping):

    سیستم بر روی هر رکورد گارانتی واکشی‌شده، یک سری عملیات برای تکمیل اطلاعات انجام می‌دهد:

    • واکشی اطلاعات گارانتی‌کننده (Guarantor):
      • ابتدا تلاش می‌شود اطلاعات همکار (colleague) از کش Redis با کلیدی مانند colleagues:{id} خوانده شود.
      • در صورت عدم وجود در کش (Cache Miss): یک کوئری به جدول colleagues در پایگاه داده زده می‌شود تا اطلاعات همکار استخراج شود.
      • سپس اطلاعات به دست آمده در Redis ذخیره می‌شود تا در درخواست‌های بعدی با سرعت بیشتری در دسترس باشد (Cache Write).
    • واکشی اتاق‌های گارانتی‌شده (برای اقامتگاهی):
      • یک کوئری مجزا به جدول charter_warranty_accommodation_rooms زده می‌شود تا تمام اتاق‌هایی که به شناسه گارانتی فعلی (warranty_id) متصل هستند، استخراج شوند.
    • ساختاردهی پاسخ نهایی:
      • اطلاعات جمع‌آوری شده در یک ساختار JSON استاندارد و قابل فهم برای فرانت‌اند قالب‌بندی می‌شود. فیلدهای پایگاه داده مانند reserve_adult و per_adult در یک شیء تو در توی warranty قرار می‌گیرند.
      • اگر هیچ اتاقی برای گارانتی یافت نشود، فیلد room_id مقدار false خواهد گرفت.

Response Structure

پاسخ موفق (Success)

در صورت موفقیت، پاسخ 200 OK به همراه یک ساختار JSON استاندارد حاوی لیست گارانتی‌ها بازگردانده می‌شود.

  • Status Code: 200 OK
{
  "status": true,
  "time": 1733271000, // Unix Timestamp
  "data": [
    {
      "id": 99,
      "item_id": 102, // شناسه آیتم (مثلا نوع اتاق)
      "guarantor": { // اطلاعات کامل همکار از کش یا دیتابیس
        "id": 25,
        "title_fa": "آژانس مسافرتی بهار",
        "title_en": "Bahar Agency",
        "first_name": "علی",
        "last_name": "رضایی",
        "credit_amount": 50000000,
        "status": 1
      },
      "warranty": {
        "adult": {
          "number": 2,
          "price": 2500000
        },
        "child": {
          "number": 1,
          "price": 1800000
        },
        "infant": {
          "number": 0,
          "price": 0
        }
      },
      "room_id": [ // لیست اتاق های این گارانتی
        {
          "id": 210,
          "warranty_id": 99,
          "room_id": 305
        },
        {
          "id": 211,
          "warranty_id": 99,
          "room_id": 306
        }
      ],
      "sank_cost": 0,
      "service_price": 150000,
      "start_date": "2025-12-10",
      "end_date": "2025-12-15",
      "status": 1
    },
    {
      "id": 88,
      "item_id": 101, // شناسه آیتم (مثلا کلاس پروازی)
      "guarantor": { ... },
      "warranty": { ... },
      "room_id": false, // این گارانتی اقامتگاهی نیست یا اتاقی ندارد
      "sank_cost": 500000,
      "service_price": 0,
      "start_date": null,
      "end_date": null,
      "status": 1
    }
  ]
}

پاسخ خطا (Error)

در صورت بروز هرگونه استثناء (Exception) در سرور، یک پاسخ با ساختار زیر و کد وضعیت (معمولا 200 OK به دلیل مدیریت خطا در کد) بازگردانده می‌شود.
توجه: نمایش trace خطا در محیط پروداکشن توصیه نمی‌شود.

{
    "status": false,
    "time": 1733271000,
    "message": "Error message from the exception.",
    "trace": [ ... ] // Stack trace of the error
}