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