Skip to main content
#P1578

PUT /api/v2/scheduled/notifications

Route Info

Method Endpoint Controller Middleware
PUT /api/v2/scheduled/notifications OfficialController@updateScheduledNotifications authWithJwt

تحلیل دقیق عملکرد (Deep Functionality Analysis)

این متد براییک ویرایشبروزرسانی کامل (Full Update) یکروی اعلان زمان‌بندی شده موجود استفاده می‌شود. عملیات بر اساسجدول idscheduled_notifications دریافتی انجام می‌شود.دهد. نکته حیاتی اینجاست که حتی فیلدهای سیستمی مانند branch و operator نیز بازنویسی می‌شوند.

نکاتمنطق کلیدیدقیق پیاده‌سازی:کد:

  1. Manualاستخراج Timestampوابستگی‌های Handling:سیستمی (System Dependencies):
    ازمتد آنجاییمقادیر کهbranch و operator را از Queryآبجکت Builder$request می‌خواند.
    ⚠️ نکته امنیتی: این مقادیر معمولاً توسط میدل‌ور authWithJwt تزریق می‌شوند، اما کد کنترلر کورکورانه آن‌ها را آپدیت می‌کند ($request->get('operator')->id). این یعنی مالکیت رکورد به "اپراتور و شعبه جاری" تغییر می‌کند.
  2. تبدیل داده‌ها (Data Transformation): 
    فیلدهای recipients و devices الزاماً با json_encode تبدیل می‌شوند. فیلد mobiles منطق شرطی دارد: اگر مقدار داشته باشد تبدیل به JSON می‌شود، در غیر این صورت NULL ذخیره می‌شود.
  3. مدیریت زمان (Timestamping): 
    چون از DB::table) به جای Eloquent استفاده شده است، ویژگی timestamps خودکار لاراول کار نمی‌کند. بنابراین، زمانشده، updated_at بهخودکار صورتنیست دستیو با استفاده از Carbon::now() مقداردهیدقیقاً ودر بروزلحظه آپدیت تنظیم می‌شود.
  4. Full Overwrite Strategy: 
    تمام فیلدها (شامل گیرندگان، دستگاه‌ها و متن) مجدداً بازنویسی می‌شوند. حتی فیلد branch نیز با شعبه کاربر جاری جایگزین می‌شود (که تضمین می‌کند کاربر فقط روی دیتای شعبه خودش اثر می‌گذارد یا مالکیت را تصاحب می‌کند).
  5. JSON Re-encoding: 
    مشابه متد ثبت، فیلدهای آرایه‌ای (recipients, devices, mobiles) مجدداً به رشته JSON تبدیل می‌شوند.

پارامترهای ورودیپردازش شده (InputProcessed Parameters)

این جدول شامل تمام داده‌هایی است که در آرایه $update استفاده شده‌اند، چه توسط کاربر ارسال شوند و چه توسط سیستم تزریق شوند.

ویرایش.
ParameterKey / Variable Source Type Required DescriptionLogic / Transformation
id Integer Yes شناسهدر شرط where استفاده می‌شود.
branchIntegerYes*مستقیماً در دیتابیس ذخیره می‌شود (ID)معمولاً رکوردتزریق موردشده نظرتوسط برایMiddleware).
operatorObject (User)Yes*آبجکت یوزر دریافت شده و ->id آن استخراج و ذخیره می‌شود.
recipientsArrayYesتوسط json_encode به رشته تبدیل می‌شود.
devicesObject/ArrayYesتوسط json_encode به رشته تبدیل می‌شود.
objectStringYesبدون تغییر ذخیره می‌شود.
typeStringYesبدون تغییر ذخیره می‌شود.
periodString/IntYesبدون تغییر ذخیره می‌شود.
status Boolean/Int Yes وضعیتبدون جدیدتغییر اعلان (1 برای فعال، 0 برای غیرفعال).
recipientsArrayYesلیست جدید گیرندگان (جایگزین لیست قبلیذخیره می‌شود).
devicesObjectYesتنظیمات دستگاه‌ها.
objectStringYesمحتوای اعلان.
typeStringYesنوع اعلان.
periodString/IntYesدوره زمانی ارسال.شود.
mobiles ArrayArray/Null No لیستاگر موبایل‌هاوجود (اختیاری)داشته باشد json_encode می‌شود، وگرنه NULL.

ساختار پاسخ‌ها (Response Structures)

✅ Success (200 OK)

در صورت آپدیت موفق:

{
    "status": true,
    "time": 1732631500
}

❌ Error (Exception Captured)

در صورت بروز خطا (مثلاً اگر ID وجود نداشته باشد، خطای دیتابیس رخ نمی‌دهد اما رکوردی هم آپدیت نمی‌شود، مگر اینکه ساختار دیتابیس جلوی دیتای غلط را بگیرد):

{
    "status": false,
    "time": 1732631505,
    "message": "...", // PHP/SQL Error Message
    "trace": [ ... ]
}