Skip to main content
#P1556

POST /api/v2/tasks/category/operation

Route Info

Method Endpoint Controller Middleware
POST /api/v2/tasks/category/operation OfficialController@operationTasksCategory authWithJwt

منطق دقیق عملکرد (Code Logic)

این متد بر اساس پارامتر ورودی action رفتار متفاوتی دارد. تمام عملیات مستقیماًCRUD را به صورت تجمیعی و با استفاده از Query Builder (بدوننه مدلEloquent Eloquent)Model) انجاممدیریت می‌کند. مراحل اجرا به ترتیب:

  1. استخراج داده‌ها: متغیر data$ از ورودی request->data$ پر می‌شود (نکته: اگر این پارامتر ارسال نشود، در خطوط بعدی ارور PHP دریافت خواهید کرد).
  2. بررسی Action: بر اساس مقدار فیلد action یکی از سه بلوک زیر اجرا می‌شود:

    • Action = store:
      • درجیک رکورد جدید در جدول tasks_categories. درج می‌شود.
      • فیلدهایفیلد branch (از ریکوئست) وریکوئست، user (از آبجکتشناسه اپراتور لاگین شده، و operatortitle/color/icon تزریقاز شده)آرایه بهdata صورت خودکار ستخوانده می‌شوند.
      • شناسه رکورد درج شده (Insert ID) گرفته می‌شود اما در خروجی برگردانده نمی‌شود.
    • Action = update:
      • آپدیت رکورد درجدول tasks_categories بر اساسکه id ورودی.آن برابر با request->id$ است آپدیت می‌شود.
      • فقطهیچ فیلدهایشرط title,دیگری color,(مثل iconبررسی بروزرسانیشعبه) می‌شوند.در کوئری وجود ندارد.
    • Action = delete:
      • حذفابتدا رکورد اصلی از جدول tasks_categories برحذف اساسمی‌شود.
      • سپس تمام id.
      • حذف آبشاری دستی (Manual Cascade): بلافاصله پس از حذف دسته، تمام رکوردهایهای جدول tasks_items که متعلقمربوط به این دسته هستند (where('category', $request->id)) استخراج می‌شوند.
      • سپس تمام رکوردهای tasks_items مربوطه حذف می‌شوند.
      • سپسدر نهایت تمام رکوردهای جدول tasks_notes که متعلقمربوط به آنتسک‌های تسک‌هااستخراج بودندشده هستند حذف می‌شوند.شوند (حذف دستی ارتباطات).
  3. پارامترهای
  4. پاسخ: ورودی
  5. ورودی بهدر صورت JSON. پارامتر dataموفقیت آرایه‌ای شامل جزئیاتوضعیت است.و زمان سرور برمی‌گرداند.

ساختار ورودی مورد انتظار

سیستم انتظار دارد ورودی‌ها دقیقاً به این شکل ارسال شوند (در غیر این صورت وارد بلوک catch می‌شود):

POST /api/v2/tasks/category/operation
Authorization: Bearer <JWT>

{
  "action": "store",      // مقادیرالزامی: مجاز:store store,| update,update | delete
  "id": 15,10,               // فقطالزامی برای update و delete
  "branch": 1001,         // الزامی است(معمولا توسط کلاینت یا میدل‌ور ست می‌شود)
  "data": {               // الزامی (حتی برای delete نیازی بهباید ارسال محتوایشود اینوگرنه آبجکتکد نیستکرش اما کلید data باید باشدمی‌کند)
      "title": "عنوانجلسات",    دسته",// الزامی برای store و update
      "color": "#FF0000"#ffffff", // الزامی برای store و update
      "icon": "fa-home"user"   // الزامی برای store و update
  }
}

خروجی‌هاخروجی واقعی

موفق:موفقیت آمیز:

{
  "status": true,
  "time": 17320365001732037000
}

در صورت بروز خطا (Exception):
شامل متن دقیق خطای PHP و Stack Trace کامل برای دیباگ.

{
  "status": false,
  "time": 1732036505,1732037005,
  "message": "UndefinedTrying to access array keyoffset \"title\""on value of type null", // مثال خطااگر data ارسال نشود
  "trace": [...]
}

تحلیلعملیات ریسکدیتابیس (Direct DB Manipulation)

این متد مستقیماً با جداول زیر درگیر است:

  • tasks_categories (Insert, Update, Delete)
  • tasks_items (Select, Delete)
  • tasks_notes (Delete)

نکات فنی و امنیتخطاهای (مهم)محتمل

  • آسیب‌پذیریوابستگی IDORبه (بسیارآرایه مهم):data: در خط اول متد $data = $request->data اجرا می‌شود. اگر کلاینت پارامتر data را نفرستد، کد متوقف نمی‌شود اما در خطوط بعدی (مثلا $data['title']) خطا می‌دهد.
  • حذف بدون Transaction: عملیات updateحذف ودر delete،۳ هیچ بررسی روی اینکه آیا id ارسالی متعلق به branch جاری استمرحله انجام نمی‌می‌شود. کاربراگر می‌توانددر دسته‌بندی‌های سایر شعبه‌ها رامرحله حذف یاtasks_items ویرایشخطایی کند.رخ دهد، دسته‌بندی حذف شده اما نوت‌ها باقی می‌مانند (Partial Delete Risk).
  • عدم وجودبررسی Transaction:مالکیت (Ownership): کوئری‌های Update و Delete فقط id را چک می‌کنند. این یعنی کد اجازه می‌دهد دسته‌بندی متعلق به یک شعبه دیگر، توسط کاربری در عملیاتشعبه delete،متفاوت حذفویرایش از سه جدول جداگانه انجام می‌شود اما(صرفاً داخلبا DB::transactionداشتن نیست. اگر در میانه کار خطا رخ دهد، داده‌های ناقص (Inconsistent Data) در دیتابیس باقی می‌مانند.
  • Validation: هیچ اعتبارسنجی روی وجود کلیدهای داخل آرایه data انجام نمی‌شود. ارسال جیسون ناقص منجر به Crash کد می‌شود.ID).