# POST /v2/core/accommodation/update

# Core Accommodation Update

این اندپوینت برای به‌روزرسانی اطلاعات یک اقامتگاه موجود استفاده می‌شود. رفتار اندپوینت در دو حالت انجام می‌شود:   
**method = "update"** → به‌روزرسانی کامل رکورد اصلی (hotels)، ثبت لوگو و رسانه، به‌روزرسانی یا ایجاد Mapping، و اجرای Jobها.  
**method = "board"** → فقط آپدیت فیلد Board و اجرای Jobهای مرتبط.

<div class="api-docs" id="bkmrk-"></div>## Request Overview

<div class="api-docs" id="bkmrk-url%3A-%2Fv2%2Fcore%2Faccomm"><div class="endpoint-info"><div>**URL:** `/v2/core/accommodation/update`</div><div>**Method:** <span class="method-post">POST</span></div><div>**Controller:** CoreController@updateAccommodation</div><div>**Middleware Stack:** authWithJwt → core</div></div></div>## Access Control

<div class="api-docs" id="bkmrk-jwt-%D9%85%D8%B9%D8%AA%D8%A8%D8%B1-operator.b">- JWT معتبر
- operator.branch == "\[0\]"

</div>## Request Body Schema

<div class="api-docs" id="bkmrk-field-type-required-"><table class="schema-table"><thead><tr><th>Field</th><th>Type</th><th>Required</th><th>Description</th></tr></thead><tbody><tr><td>id</td><td>integer</td><td>yes</td><td>ID اقامتگاه</td></tr><tr><td>method</td><td>string</td><td>yes</td><td>مقدار: update یا board</td></tr><tr><td>data</td><td>object</td><td>yes</td><td>شیء اصلی داده‌های ورودی</td></tr></tbody></table>

</div>در حالت **method = update**، ساختار `data` شامل تمام فیلدهای زیر است:

<div class="api-docs" id="bkmrk-field-type-descripti"><table class="schema-table"><thead><tr><th>Field</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>type</td><td>string</td><td>نوع اقامتگاه</td></tr><tr><td>title\_fa</td><td>string</td><td>نام فارسی</td></tr><tr><td>title\_en</td><td>string</td><td>نام انگلیسی</td></tr><tr><td>rate</td><td>int</td><td>ستاره</td></tr><tr><td>country</td><td>int</td><td>ID کشور</td></tr><tr><td>state</td><td>int</td><td>ID استان</td></tr><tr><td>city</td><td>int</td><td>ID شهر</td></tr><tr><td>location</td><td>string</td><td>موقعیت جغرافیایی</td></tr><tr><td>address</td><td>string</td><td>آدرس کامل</td></tr><tr><td>description</td><td>string</td><td>توضیحات</td></tr><tr><td>board</td><td>array</td><td>BB/HB/FB … یا خالی</td></tr><tr><td>possibilities</td><td>array</td><td>امکانات هتل</td></tr><tr><td>details</td><td>object</td><td>JSON کامل جزئیات</td></tr><tr><td>site</td><td>string</td><td>وب‌سایت</td></tr><tr><td>email</td><td>string</td><td>ایمیل</td></tr><tr><td>mobile</td><td>string</td><td>موبایل</td></tr><tr><td>phone</td><td>string</td><td>تلفن ثابت</td></tr><tr><td>leader\_name</td><td>string</td><td>نام مدیر</td></tr><tr><td>leader\_mobile</td><td>string</td><td>موبایل مدیر</td></tr><tr><td>confirm\_status</td><td>int</td><td>تأیید/عدم‌تأیید</td></tr><tr><td>priority</td><td>int</td><td>اولویت نمایش</td></tr><tr><td>logo</td><td>string|null</td><td>مسیر عکس لوگو</td></tr><tr><td>media</td><td>array</td><td>گالری تصاویر</td></tr><tr><td>mapping</td><td>object|null</td><td>اطلاعات Supplier Mapping</td></tr></tbody></table>

</div>## Update Logic (method = "update")

<div class="api-docs" id="bkmrk-%D8%A2%D9%BE%D8%AF%DB%8C%D8%AA-%DA%A9%D8%A7%D9%85%D9%84-%D8%B1%DA%A9%D9%88%D8%B1%D8%AF-%D8%AF%D8%B1-">- آپدیت کامل رکورد در جدول `hotels` با Query Builder
- board و possibilities در صورت خالی بودن → null
- details همیشه json\_encode می‌شود
- updated\_at ← Carbon::now()

</div>### Media Update Rules

<div class="api-docs" id="bkmrk-%D8%A7%DA%AF%D8%B1-logo-%D8%AC%D8%AF%DB%8C%D8%AF-%D8%A7%D8%B1%D8%B3%D8%A7%D9%84-">- اگر logo جدید ارسال شده باشد: 
    - extract extension
    - چک تکراری بودن در Media
    - در صورت عدم وجود → create
- media\[\]: 
    - برای هر آیتم extension استخراج می‌شود
    - چک وجود رکورد
    - در صورت نبودن → create

</div>### Mapping Logic

<div class="api-docs" id="bkmrk-%D8%A7%DA%AF%D8%B1-mapping-%D9%88%D8%AC%D9%88%D8%AF-%D8%AF%D8%A7%D8%B4">- اگر mapping وجود داشته باشد: 
    - اگر رکورد mapping\_accommodations وجود داشته باشد → update
    - در غیر اینصورت → insert
    - کلیدهای پشتیبانی‌شده: `tport, sepehr, snapptrip, alibaba, eghamat24, iranhotelonline`

</div>## Update Logic (method = "board")

<div class="api-docs" id="bkmrk-%D9%81%D9%82%D8%B7-%D9%81%DB%8C%D9%84%D8%AF-board-%D8%A2%D9%BE%D8%AF%DB%8C%D8%AA">- فقط فیلد board آپدیت می‌شود
- null در صورت خالی بودن
- updated\_at آپدیت می‌شود

</div>## Background Jobs

<div class="api-docs" id="bkmrk-job-queue-delay-scop"><table class="schema-table"><thead><tr><th>Job</th><th>Queue</th><th>Delay</th><th>Scope</th></tr></thead><tbody><tr><td>UpdateRedis</td><td>fastJob</td><td>none</td><td>method = update → hotels و hotels\_details   
method = board → فقط hotels\_details</td></tr><tr><td>SystemLog</td><td>snailJob</td><td>10 minutes</td><td>update → نوع UpdateAccommodation   
board → نوع BoardAccommodation</td></tr></tbody></table>

</div>## Response (Success)

```
{
  "status": true,
  "time": 1710000000,
  "message": "1402 | Accommodation updated!"
}
  
```

<div class="api-docs" id="bkmrk--1"></div>## Response (Error)

```
{
  "status": false,
  "code": "1003",
  "message": "(Exception message)",
  "trace": [...]
}
  
```

<div class="api-docs" id="bkmrk--2"></div>## Flowchart

<div class="api-docs" id="bkmrk-validate-jwt-%E2%86%92-valid"><div class="flowchart"><div class="flow-item">Validate JWT → Validate Core Access</div><div class="flow-arrow">↓</div><div class="flow-item">Read method / id / data</div><div class="flow-arrow">↓</div><div class="flow-item">IF method = update</div><div class="flow-arrow">↓</div><div class="flow-item">Update hotels Record</div><div class="flow-arrow">↓</div><div class="flow-item">Insert logo if new</div><div class="flow-arrow">↓</div><div class="flow-item">Insert media images if new</div><div class="flow-arrow">↓</div><div class="flow-item">Insert/Update Supplier Mapping</div><div class="flow-arrow">↓</div><div class="flow-item">Dispatch UpdateRedis + SystemLog</div><div class="flow-arrow">↓</div><div class="flow-item">Return Success</div>  
  
<div class="flow-item">IF method = board</div><div class="flow-arrow">↓</div><div class="flow-item">Update board Field Only</div><div class="flow-arrow">↓</div><div class="flow-item">Dispatch UpdateRedis(board) + SystemLog</div><div class="flow-arrow">↓</div><div class="flow-item">Return Success</div></div></div>