#P1653
POST /v2/core/accommodation/update
Core Accommodation Update
این اندپوینت برای بهروزرسانی اطلاعات یک اقامتگاه موجود استفاده میشود. رفتار اندپوینت در دو حالت انجام میشود:
method = "update" → بهروزرسانی کامل رکورد اصلی (hotels)، ثبت لوگو و رسانه، بهروزرسانی یا ایجاد Mapping، و اجرای Jobها.
method = "board" → فقط آپدیت فیلد Board و اجرای Jobهای مرتبط.
Request Overview
URL:
/v2/core/accommodation/updateMethod: POST
Controller: CoreController@updateAccommodation
Middleware Stack: authWithJwt → core
Access Control
- JWT معتبر
- operator.branch == "[0]"
Request Body Schema
| Field | Type | Required | Description |
|---|---|---|---|
| id | integer | yes | ID اقامتگاه |
| method | string | yes | مقدار: update یا board |
| data | object | yes | شیء اصلی دادههای ورودی |
در حالت method = update، ساختار data شامل تمام فیلدهای زیر است:
| Field | Type | Description |
|---|---|---|
| type | string | نوع اقامتگاه |
| title_fa | string | نام فارسی |
| title_en | string | نام انگلیسی |
| rate | int | ستاره |
| country | int | ID کشور |
| state | int | ID استان |
| city | int | ID شهر |
| location | string | موقعیت جغرافیایی |
| address | string | آدرس کامل |
| description | string | توضیحات |
| board | array | BB/HB/FB … یا خالی |
| possibilities | array | امکانات هتل |
| details | object | JSON کامل جزئیات |
| site | string | وبسایت |
| string | ایمیل | |
| mobile | string | موبایل |
| phone | string | تلفن ثابت |
| leader_name | string | نام مدیر |
| leader_mobile | string | موبایل مدیر |
| confirm_status | int | تأیید/عدمتأیید |
| priority | int | اولویت نمایش |
| logo | string|null | مسیر عکس لوگو |
| media | array | گالری تصاویر |
| mapping | object|null | اطلاعات Supplier Mapping |
Update Logic (method = "update")
- آپدیت کامل رکورد در جدول
hotelsبا Query Builder - board و possibilities در صورت خالی بودن → null
- details همیشه json_encode میشود
- updated_at ← Carbon::now()
Media Update Rules
- اگر logo جدید ارسال شده باشد:
- extract extension
- چک تکراری بودن در Media
- در صورت عدم وجود → create
- media[]:
- برای هر آیتم extension استخراج میشود
- چک وجود رکورد
- در صورت نبودن → create
Mapping Logic
- اگر mapping وجود داشته باشد:
- اگر رکورد mapping_accommodations وجود داشته باشد → update
- در غیر اینصورت → insert
- کلیدهای پشتیبانیشده:
tport, sepehr, snapptrip, alibaba, eghamat24, iranhotelonline
Update Logic (method = "board")
- فقط فیلد board آپدیت میشود
- null در صورت خالی بودن
- updated_at آپدیت میشود
Background Jobs
| Job | Queue | Delay | Scope |
|---|---|---|---|
| UpdateRedis | fastJob | none | method = update → hotels و hotels_details method = board → فقط hotels_details |
| SystemLog | snailJob | 10 minutes | update → نوع UpdateAccommodation board → نوع BoardAccommodation |
Response (Success)
{
"status": true,
"time": 1710000000,
"message": "1402 | Accommodation updated!"
}
Response (Error)
{
"status": false,
"code": "1003",
"message": "(Exception message)",
"trace": [...]
}
Flowchart
Validate JWT → Validate Core Access
↓
Read method / id / data
↓
IF method = update
↓
Update hotels Record
↓
Insert logo if new
↓
Insert media images if new
↓
Insert/Update Supplier Mapping
↓
Dispatch UpdateRedis + SystemLog
↓
Return Success
IF method = board
↓
Update board Field Only
↓
Dispatch UpdateRedis(board) + SystemLog
↓
Return Success