# GET /api/v2/tasks/categories/list

<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></tr><tr><td style="direction: ltr; padding: 10px;">GET</td><td style="direction: ltr; padding: 10px;">/api/v2/tasks/categories/list</td><td style="direction: ltr; padding: 10px;">OfficialController@listTasksCategories</td></tr></tbody></table>

</div></div>### شرح عملکرد (Functionality)

این متد لیست دسته‌بندی‌های تسک را در دو گروه مجزا ("my" و "other") واکشی می‌کند. منطق تفکیک و پردازش داده‌ها به شرح زیر است:

<div id="bkmrk-%D8%A8%D8%AE%D8%B4-%22my-categories%22-" style="direction: rtl; font-family: Vazir,Tahoma; text-align: justify; line-height: 1.85;">- **بخش "My Categories" (دسته‌بندی‌های من):**
    - تمامی رکوردهایی از جدول `tasks_categories` انتخاب می‌شوند که فیلد `user` آن‌ها برابر با شناسه اپراتور جاری باشد.
    - تعداد تسک‌های فعال (status=1) در هر دسته‌بندی شمارش می‌شود.
    - اگر پارامتر `tasks` در درخواست ارسال شده باشد، متد `getTasks` با آرگومان `own` فراخوانی شده و لیست تسک‌های زیرمجموعه نیز بارگذاری می‌شود.
- **بخش "Other Categories" (سایر دسته‌بندی‌های مرتبط):**
    - دسته‌بندی‌هایی را پیدا می‌کند که اپراتور جاری سازنده آن‌ها نیست، اما در تسک‌های زیرمجموعه آن‌ها (`tasks_items`) به عنوان مسئول (Operator) تعیین شده است.
    - از دستور `JSON_CONTAINS` روی فیلد `operators` در جدول `tasks_items` برای یافتن مشارکت اپراتور استفاده می‌شود.
    - اگر پارامتر `tasks` ارسال شود، متد `getTasks` با آرگومان `other` فراخوانی می‌شود تا فقط تسک‌های مرتبط با کاربر را برگرداند.
- **Hydration داده‌ها (User &amp; Operators):**
    - برای نمایش اطلاعات کاربر سازنده (`user`)، از متد استاتیک `StaticController::getOperators` استفاده می‌شود. از آنجا که این متد آرایه برمی‌گرداند، در خروجی این کنترلر مستقیماً ایندکس `[0]` آن استخراج و در فیلد `user` قرار می‌گیرد.
    - در بخش تسک‌ها (اگر لود شوند)، فیلد `operators` حاوی آرایه‌ای کامل از خروجی `getOperators` است.

</div>### پارامترهای ورودی (Input Parameters)

<div id="bkmrk-%D9%86%D8%A7%D9%85-%D9%BE%D8%A7%D8%B1%D8%A7%D9%85%D8%AA%D8%B1-%D9%86%D9%88%D8%B9-%D8%A7%D9%84%D8%B2%D8%A7" 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;">نام پارامتر</th><th style="padding: 8px;">نوع</th><th style="padding: 8px;">الزامی؟</th><th style="padding: 8px;">توضیحات</th></tr></thead><tbody><tr><td style="direction: ltr;">branch</td><td>Integer</td><td>بله</td><td>شناسه شعبه فعال (معمولاً از طریق میدل‌ور تزریق می‌شود).</td></tr><tr><td style="direction: ltr;">tasks</td><td>Boolean/Int</td><td>خیر</td><td>اگر مقدار داشته باشد (مثلاً 1)، لیست تسک‌های هر دسته‌بندی نیز در خروجی (`tasks`) بارگذاری می‌شود (Eager Loading دستی).</td></tr></tbody></table>

</div></div>### نمونه خروجی (Response)

**نکته مهم در مورد ساختار داده‌ها:** فیلد `user` در آبجکت دسته‌بندی، یک آبجکت تکی است (چون ایندکس 0 دریافت می‌شود)، اما فیلد `operators` در داخل تسک‌ها، یک آرایه از آبجکت‌هاست.

```
{
    "status": true,
    "time": 1732615000,
    "data": {
        "my": [
            {
                "id": 5,
                "user": {
                    "id": 10,
                    "text": "1001 - نام نام‌خانوادگی",
                    "query": {
                        "id": 10,
                        "sex": "male",
                        "first_name": "نام",
                        "last_name": "نام‌خانوادگی",
                        "telegram": "username",
                        "group": "support",
                        "avatar": "path/to/img.jpg",
                        "position": "manager",
                        "personnel_id": 1001
                    }
                },
                "title": "توسعه فنی",
                "color": "#FF5733",
                "icon": "fa-code",
                "status": 1,
                "created": "2024-01-01T12:00:00.000000Z",
                "counter": 3,
                "tasks": [ // فقط اگر tasks=1 ارسال شده باشد پر می‌شود
                    {
                        "id": 101,
                        "user": { ... }, // آبجکت سازنده تسک (مشابه ساختار user بالا)
                        "category": {
                            "id": 5,
                            "title": "توسعه فنی"
                        },
                        "title": "بررسی باگ لاگین",
                        "connection": false, // یا آبجکت کانکشن اگر وجود داشته باشد
                        "priority": 1,
                        "order": 0,
                        "description": "توضیحات تسک...",
                        "deadline": "1403-10-20",
                        "operators": [ // آرایه اپراتورهای مسئول
                             {
                                "id": 12,
                                "text": "1002 - همکار فنی",
                                "query": { ... }
                             }
                        ],
                        "status": 1,
                        "created": "2024-11-01T10:00:00.000000Z"
                    }
                ]
            }
        ],
        "other": [
            {
                "id": 8,
                "user": { ... }, // کاربری که دسته‌بندی را ساخته (نه کاربر جاری)
                "title": "امور مالی",
                "color": "#33FF57",
                "icon": "fa-money",
                "status": 1,
                "created": "2024-02-15T14:30:00.000000Z",
                "counter": 1, // تعداد تسک‌هایی که من در آن‌ها مشارکت دارم
                "tasks": false // اگر tasks ارسال نشود، false برمی‌گردد
            }
        ]
    }
}
```