#P1558
GET /api/v2/tasks/list
Route Info
| Method | Endpoint | Controller | @ Method | Middleware | |||
|---|---|---|---|---|---|---|---|
| GET | /api/v2/tasks/list | OfficialController@listTasks | authWithJwt |
معماری و منطق پردازش (Processing Logic & Architecture)Logic)
این متد لیست وظایف را با مکانیزم Lazy Loading دستی آمادهسازی میکند. پس از دریافت رکوردهای خام از جدول tasks_items، سیستم طی یک فرآیند Post-Processing روی هر آیتم حلقه زدهکرده و برای تکمیل اطلاعات (Data Hydration)، توابع Helperکمکی استاتیک را فراخوانیروی نتایج اجرا میکند:
- واکشی اطلاعات اپراتورها (Operator
Resolution (Resolution):
متدStaticController::getOperators):شناسههایفراخوانیکاربرانمیشود. این تابع، شناسه (چهID)سازندهیا آرایهای از شناسهها را دریافت کرده وچهخروجیاپراتورهای مسئول)را بهاین تابع ارسال میشوند. تابع ابتدا ورودی را نرمالسازی کرده (تبدیل رشته JSON یا عدد به آرایه)، سپس با کوئریwhereInاز جدولoperatorsاطلاعات را واکشی میکند. خروجی شاملصورت یکرشتهلیستفرمتشدهبرمیگرداند(که شامل:- فیلد
text):برایترکیبنمایششناسهسریعپرسنلی ویکنام. - آبجکت
queryحاوی: تمامفیلدهایجزئیاتهویتیرکوردوجدولسازمانیoperators.
کاربر است. - فیلد
- بررسی اتصال به رفرنس (Connection
HydrationHydration):
اگر(تسک دارای اتصال باشد، متدOfficialController::getConnection):اگر تسک به یک موجودیت خارجی (مثل رفرنس فروش) متصل باشد، این تابعاجرا میشود. برای نوعreference، سیستم ابتداسعی میکند اطلاعات مالی را ازRedisبخواند.رادربررسیصورتمیکند.عدماگروجوداطلاعاتدرموجودکش (Cache Miss)،نباشد، متدTradeController::financialاجرا شده و نتیجهدر Redisکش (Cache) میشود تا سربار محاسبات مالی در فراخوانیهای بعدی کاهش یابد.شود.
ساختار پاسخ (Response Structure)
خروجی زیر دقیقاً بر اساس توابعکدهای getOperators و getConnection که ارائه کردید بازسازیتولید شده است:
{
"status": true,
"time": 1732047000,
"data": [
{
"id": 105,
"title": "پیگیریSample رفرنسTask ۱۲۵۰"Title",
"category": {
"id": 12,
"title": "مالی و حسابداری"Development"
},
// خروجیGenerated دقیقby StaticController::getOperators برای فیلد user (سازنده)
"user": [
{
"id": 50,
"text": "10050 - علیAli محمدی"Mohammadi",
"query": {
"id": 50,
"sex": "male",
"first_name": "علی"Ali",
"last_name": "محمدی"Mohammadi",
"telegram": "ali_dev",
"group": "IT",
"avatar": "path/to/avatar.img.jpg",
"position": "مدیر فنی"Developer",
"personnel_id": "10050"
}
}
],
// خروجیGenerated دقیقby StaticController::getOperators برای فیلد operators (مسئولین انجام)
"operators": [
{
"id": 51,
"text": "10051 - رضاReza علوی"Alavi",
"query": {
"id": 51,
"sex": "male",
"first_name": "رضا"Reza",
"last_name": "علوی"Alavi",
"telegram": "reza_acc",
"group": "Accounting",
"avatar": null,
"position": "حسابدار ارشد"Accountant",
"personnel_id": "10051"
}
}
],
// خروجیGenerated دقیقby OfficialController::getConnection (در صورتی که تسک به رفرنس متصل باشد)
"connection": [
{
"id": 2050,
"type": "reference",
"title": "تورRedis کیشCached - هتل داریوش"Title", // خوانده شده از Redis
"financial": {
// آبجکت بازگشتی از TradeController::financial
"total_price": 50000000,
"paid": 20000000,
"remaining": 30000000,
"status": "debtor"
}
}
],
"priority": 1,
"order": 0,
"description": "لطفاTask ماندهdescription حساب این رفرنس با مشتری چک شود.details...",
"deadline": "2025-02-20",
"status": 1,
"created": "2025-02-18 10:30:00"
}
]
}