#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 (تغییر فرمت) را روی دادهها انجام میدهد.
مراحل اجرای کد:
- Database Query: اتصال به جدول
scheduled_notificationsو دریافت تمام ستونها.- Scope Filtering: نتایج بر اساس مقدار
branchفیلتر میشوند. این مقدار از آبجکت$requestخوانده میشود (که معمولاً توسط میدلور پس از احراز هویت ست شده است).
- Scope Filtering: نتایج بر اساس مقدار
- Data Transformation Loop (Map): روی تکتک رکوردهای دریافتی یک حلقه اجرا شده و تغییرات زیر اعمال میشود:
- Unsetting Fields: برای امنیت و کاهش حجم Payload، فیلدهای سیستمی زیر حذف میشوند:
created_at(تاریخ ایجاد رکورد)updated_at(تاریخ ویرایش رکورد)branch(شناسه شعبه - چون همه خروجیها متعلق به یک شعبه هستند، تکرار آن غیرضروری است).
- JSON Decoding: فیلدهای زیر که در دیتابیس به صورت رشته (String/Text) ذخیره شدهاند، به آبجکت یا آرایه PHP تبدیل میشوند تا در خروجی JSON نهایی به درستی نمایش داده شوند:
recipientsdevicesmobiles
- Unsetting Fields: برای امنیت و کاهش حجم Payload، فیلدهای سیستمی زیر حذف میشوند:
- Response Formatting: دادههای پردازش شده در قالب استاندارد پاسخ موفقیتآمیز قرار میگیرند.
- 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 برای دیباگ (فقط در محیط توسعه باید نمایش داده شود)
}