# Route: POST /api/v2/online/{type}/lock

## Route Info

<div id="bkmrk-method-endpoint-cont" style="direction: rtl; font-family: Vazir; text-align: justify; line-height: 1.9;"><table border="1" style="width: 96%; margin: auto; border-collapse: collapse; text-align: center;"><tbody><tr style="background: #f9f9f9; font-weight: bold;"><td>Method</td><td>Endpoint</td><td>Controller</td><td>Middleware</td><td>Purpose</td></tr><tr><td>POST</td><td style="direction: ltr;">/api/v2/online/{type}/lock</td><td style="direction: ltr;">OnlineController@lockItemProgress</td><td style="direction: ltr;">authWithJwt</td><td>قفل‌گذاری‌ موقت در سیستم موتور رزرو (Flight/Train)</td></tr></tbody></table>

</div>### منطق عملکرد

<div id="bkmrk-%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF%E2%80%AF%D9%86%D9%85%D9%88%D9%86%D9%87%E2%80%8C%D8%A7%DB%8C%E2%80%AF%D8%A7%D8%B2%E2%80%AF%5Ca" style="direction: rtl; font-family: Vazir; text-align: justify; line-height: 1.9;">1. ایجاد نمونه‌ای از `\App\Lib\BaseService`
2. فراخوانی تابع `lockItemProgress($request‑>data, false, $branch, $operatorId)`
3. ثبت نتیجه در جدول `temporary_reservations` با ساختار: 
    - `data` → درخواست ارسالی
    - `operator` → شناسه اپراتور
    - `result` → پاسخ دریافتی از BaseService
    - timestamps → `now()`
4. بازگرداندن `lock_id` و نتیجه در خروجی JSON
5. در صورت استثناء: ارسال وضعیت false با کد خطای `1002` و اطلاعات پشتیبانی

</div>### نمونه پاسخ موفق

```
{
 "status": true,
 "time": 1732050123,
 "lock_id": 9321,
 "data": {
   "status": true,
   "token": "a342ff‑lock‑hash‑string",
   "expire": 180
 }
}
```

### ورودی‌ها

<div id="bkmrk-%D9%BE%D8%A7%D8%B1%D8%A7%D9%85%D8%AA%D8%B1-%D9%86%D9%88%D8%B9-%D8%B6%D8%B1%D9%88%D8%B1%DB%8C-%D8%AA%D9%88" style="direction: rtl; font-family: Vazir; text-align: justify; line-height: 1.9;"><table border="1" style="width: 94%; margin: auto; border-collapse: collapse; text-align: center;"><tbody><tr style="background: #fafafa; font-weight: bold;"><td>پارامتر</td><td>نوع</td><td>ضروری</td><td>توضیح</td></tr><tr><td>type</td><td>string</td><td>بله</td><td>نوع سرویس (`flight` | `train`)</td></tr><tr><td>data</td><td>object</td><td>بله</td><td>اطلاعات کامل آیتم مورد قفل</td></tr><tr><td>branch</td><td>integer</td><td>بله</td><td>شناسه شعبه</td></tr><tr><td>operator</td><td>object</td><td>بله</td><td>اپراتور فعلی (از JWT)</td></tr></tbody></table>

</div>### پاسخ در صورت خطا

```
{
 "status": false,
 "time": 1732050123,
 "error": {
   "code": 1002,
   "message": "Seats not available",
   "trace": [...]
 },
 "support": {
   "phone": "021‑91016838 in 121",
   "email": "ict@airplus.app",
   "panel": "helpdesk.airplus.app"
 }
}
```

### وابستگی‌ها

<div class="align-right" id="bkmrk-baseservice%3A%3Alockite" style="font-family: Vazir; line-height: 1.9;">- `BaseService::lockItemProgress()`
- DB Facade روی `temporary_reservations`

</div>### نکات توسعه

<div id="bkmrk-online-lock-item" style="font-family: Vazir; line-height: 1.9;">- در نسخه‌های بعدی TTL لاک باید برگردانده شود.
- ثبت لاگ `SystemLog(type="LockOnlineItem")` جهت ردیابی.

</div>