Skip to main content
#P1652

POST /v2/core/accommodation/store

Core Accommodation Store

این اندپوینت یک اقامتگاه جدید (Hotel / Accommodation) را در سیستم ثبت می‌کند. داده‌ها از کلید data در بدنه درخواست دریافت شده و به‌صورت کامل روی جدول hotels درج می‌شوند. سپس عملیات‌های جانبی شامل ذخیره لوگو و گالری رسانه، ثبت Mapping در جدول mapping_accommodations، و اجرای سه Job (UpdateRedis، SystemLog و RunCron) در صف انجام می‌شود.

Request Overview

URL: /v2/core/accommodation/store
Method: POST
Controller: CoreController@storeAccommodation
Middleware Stack: authWithJwt → core

Access Control

دسترسی فقط در صورتی مجاز است که:

  • JWT معتبر باشد (middleware: authWithJwt)
  • operator.branch == "[0]" باشد (middleware: core)

Request Body Schema

تمام ورودی‌ها داخل کلید data ارسال می‌شوند.

Field Type Required Description
type string yes نوع اقامتگاه (hotel, hostel, …)
title_fa string yes نام فارسی
title_en string yes نام انگلیسی
rate integer no تعداد ستاره — اگر مقدار نداشته باشد 0 ذخیره می‌شود
country integer yes ID کشور
state integer yes ID استان
city integer yes ID شهر
location string no لوکیشن جغرافیایی (latitude,longitude)
address string yes آدرس کامل
description string no شرح
board array no مثلاً: ["BB","HB","FB"] — در صورت خالی null
possibilities array no امکانات — در صورت خالی null
details object yes جزئیات کامل (json_encode ذخیره می‌شود)
site string no وب‌سایت
email string no ایمیل
mobile string no موبایل مدیر/هتل
phone string no تلفن ثابت
leader_name string no نام مسئول
leader_mobile string no موبایل مسئول
confirm_status integer yes وضعیت تأیید (0/1)
priority integer yes اولویت در نمایش
logo string|null no مسیر عکس لوگو — اگر null باشد ذخیره نمی‌شود
media array no لیست تصاویر گالری — هر مورد path است
mapping object no اتصال به سرویس‌های بیرونی (tport, sepehr, snapptrip, ...)

Core Database Insertion Logic

عملیات اصلی درج:

  • insertGetId روی جدول hotels
  • json_encode برای: board، possibilities، details
  • پر کردن created_at و updated_at با Carbon::now()
  • اگر لوگو وجود داشته باشد → درج در Media
  • اگر media آرایه داشته باشد → درج تک‌تک در Media
  • اگر mapping موجود باشد → درج در mapping_accommodations
id = DB::table('hotels')->insertGetId([...])
  

Media Insertion Rules

هر فایل مسیر مانند

"uploads/hotels/abc.jpg"

به شکل زیر پردازش می‌شود:

  • استخراج extension بر اساس آخرین "."
  • نوع برای لوگو: logo
  • نوع برای گالری: image

Mapping Insertion

شیء mapping می‌تواند شامل کلیدهای زیر باشد. هر مقدار خالی (null / "") → در DB مقدار null ذخیره می‌شود.

  • tport
  • sepehr
  • snapptrip
  • alibaba
  • eghamat24
  • iranhotelonline

در جدول mapping_accommodations فیلد accommodation = ID درج شده ذخیره می‌شود.

Background Jobs

در ادامه سه Job اجرا می‌شود:

Job Queue Delay Description
UpdateRedis fastJob +1 min آپدیت کش Redis برای hotels و hotels_details
SystemLog snailJob +10 min ثبت عملیات StoreAccommodation با user-agent و IP
RunCron fastJob +1 min اجرای فرآیند بروزرسانی اقامتگاه

Response (Success)

{
  "status": true,
  "time": 1710000000,
  "message": "1391 | Accommodation added!"
}
  

Response (Error)

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

Flowchart

AuthWithJWT → Validate Token
CoreAccess → operator.branch == "[0]"
Extract data[] From Request
Insert Main Record Into hotels
If logo → Insert Into Media
If media[] → Insert Each Into Media
If mapping → Insert Into mapping_accommodations
Dispatch 3 Background Jobs
Return Success JSON