Skip to main content
#P1574

GET /api/v2/scheduled/notifications

Route Info

Method Endpoint Controller Middleware
GET /api/v2/scheduled/notifications OfficialController@listScheduledNotifications authWithJwt

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

این متد وظیفه استخراج و آماده‌سازی لیست اعلانات زمان‌بندی شده (Scheduled Notifications) را دارد. برخلاف یک کوئری ساده، این تابع عملیات Sanitization (پاک‌سازی) و Transformation (تغییر فرمت) را روی داده‌ها انجام می‌دهد.

مراحل اجرای کد:

  1. Database Query: اتصال به جدول scheduled_notifications و دریافت تمام ستون‌ها.
    • Scope Filtering: نتایج بر اساس مقدار branch فیلتر می‌شوند. این مقدار از آبجکت $request خوانده می‌شود (که معمولاً توسط میدل‌ور پس از احراز هویت ست شده است).
  2. Data Transformation Loop (Map): روی تک‌تک رکوردهای دریافتی یک حلقه اجرا شده و تغییرات زیر اعمال می‌شود:
    • Unsetting Fields: برای امنیت و کاهش حجم Payload، فیلدهای سیستمی زیر حذف می‌شوند:
      • created_at (تاریخ ایجاد رکورد)
      • updated_at (تاریخ ویرایش رکورد)
      • branch (شناسه شعبه - چون همه خروجی‌ها متعلق به یک شعبه هستند، تکرار آن غیرضروری است).
    • JSON Decoding: فیلدهای زیر که در دیتابیس به صورت رشته (String/Text) ذخیره شده‌اند، به آبجکت یا آرایه PHP تبدیل می‌شوند تا در خروجی JSON نهایی به درستی نمایش داده شوند:
      • recipients
      • devices
      • mobiles
  3. Response Formatting: داده‌های پردازش شده در قالب استاندارد پاسخ موفقیت‌آمیز قرار می‌گیرند.
  4. Error Handling: کل پروسه داخل بلوک try-catch قرار دارد. در صورت بروز هرگونه خطا (مثل قطع دیتابیس یا مشکل در Decode کردن JSON)، سیستم کرش نکرده و یک پاسخ استاندارد خطا برمی‌گرداند.

ورودی‌ها و وابستگی‌ها (Inputs & Dependencies)

منبع (Source) پارامتر نوع توضیحات فنی
Request / Auth Middleware branch Integer/String این پارامتر به صورت صریح در URL دیده نمی‌شود اما متد $request->get('branch') برای فیلتر کردن کوئری SQL حیاتی است. این مقدار معمولاً از توکن کاربر استخراج می‌شود.

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

✅ پاسخ موفق (Success - 200 OK)

در صورت اجرای موفقیت‌آمیز، آرایه‌ای شامل وضعیت، زمان سرور و لیست داده‌ها برگردانده می‌شود.

{
    "status": true,
    "time": 1732631000, // Timestamp زمان اجرای درخواست
    "data": [
        {
            "id": 15, // فیلدهای باقی‌مانده از جدول
            "title": "Title from DB", // (فرض بر وجود این فیلد در دیتابیس)
            "message": "Message Body", // (فرض بر وجود این فیلد در دیتابیس)
            // فیلدهای Decode شده:
            "recipients": ["user_group_1", "user_group_2"], // فرمت آرایه
            "devices": {"android": true, "ios": false}, // فرمت آبجکت
            "mobiles": ["0912xxxxxxx"] // فرمت آرایه
            // نکته: created_at, updated_at, branch در اینجا وجود ندارند.
        }
    ]
}

❌ پاسخ خطا (Failure - Exception Captured)

در صورت بروز خطای سیستمی (Exception)، بلوک catch فعال شده و خروجی زیر را تولید می‌کند:

{
    "status": false,
    "time": 1732631005,
    "message": "HY000 : SQLSTATE[HY000] [2002] Connection refused", // کد خطا + متن خطا
    "trace": [ ... ] // آرایه کامل Stack Trace برای دیباگ (فقط در محیط توسعه باید نمایش داده شود)
}