# GET /api/v2/scheduled/notifications

<div id="bkmrk-" style="direction: rtl; font-family: Vazir,Tahoma; text-align: justify; line-height: 1.85;"></div>### Route Info

<div id="bkmrk-method-endpoint-cont" style="direction: rtl; font-family: Vazir,Tahoma; text-align: justify; line-height: 1.85;"><div><table border="1" style="width: 100%; margin: auto; border-collapse: collapse; text-align: center; border: 1px solid #ddd;"><tbody><tr style="background: #f4f4f4; font-weight: bold;"><td style="padding: 10px;">Method</td><td style="padding: 10px;">Endpoint</td><td style="padding: 10px;">Controller</td><td style="padding: 10px;">Middleware</td></tr><tr><td style="direction: ltr; padding: 10px;">GET</td><td style="direction: ltr; padding: 10px;">/api/v2/scheduled/notifications</td><td style="direction: ltr; padding: 10px;">OfficialController@listScheduledNotifications</td><td style="direction: ltr; padding: 10px;">authWithJwt</td></tr></tbody></table>

</div></div>### تحلیل دقیق عملکرد (Deep Functionality Analysis)

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

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

<div id="bkmrk-database-query%3A-%D8%A7%D8%AA%D8%B5%D8%A7" style="direction: rtl; font-family: Vazir,Tahoma; text-align: justify; line-height: 1.85;">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)، سیستم کرش نکرده و یک پاسخ استاندارد خطا برمی‌گرداند.

</div>### ورودی‌ها و وابستگی‌ها (Inputs &amp; Dependencies)

<div id="bkmrk-%D9%85%D9%86%D8%A8%D8%B9-%28source%29-%D9%BE%D8%A7%D8%B1%D8%A7%D9%85%D8%AA" style="direction: rtl; font-family: Vazir,Tahoma; text-align: justify; line-height: 1.85;"><div><table border="1" style="width: 100%; border-collapse: collapse; text-align: right;"><thead><tr style="background: #f4f4f4;"><th style="padding: 8px;">منبع (Source)</th><th style="padding: 8px;">پارامتر</th><th style="padding: 8px;">نوع</th><th style="padding: 8px;">توضیحات فنی</th></tr></thead><tbody><tr><td style="direction: ltr;">Request / Auth Middleware</td><td style="direction: ltr;">branch</td><td>Integer/String</td><td>این پارامتر به صورت صریح در URL دیده نمی‌شود اما متد `$request->get('branch')` برای فیلتر کردن کوئری SQL حیاتی است. این مقدار معمولاً از توکن کاربر استخراج می‌شود.</td></tr></tbody></table>

</div></div>### ساختار پاسخ‌ها (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 برای دیباگ (فقط در محیط توسعه باید نمایش داده شود)
}
```