#P1556
POST /api/v2/tasks/category/operation
Route Info
| Method | Endpoint | Controller | |
| POST | /api/v2/tasks/category/operation | OfficialController@operationTasksCategory |
منطق دقیقشرح عملکرد (Code Logic)Functionality)
این متد عملیاتمدیریت CRUDکامل (CRUD) دستهبندیهای تسک را بهبر صورتعهده تجمیعیدارد و با استفاده از Query Builder (نه Eloquent Model) مدیریت میکند. مراحل اجرا به ترتیب:
استخراج دادهها:متغیرdata$از ورودیrequest->data$پر میشود (نکته: اگر این پارامتر ارسال نشود، در خطوط بعدی ارور PHP دریافت خواهید کرد).بررسی Action:بر اساسمقدار فیلدپارامترactionیکیرفتارازمتفاوتیسهنشانبلوکمیدهد:زیر اجرا میشود:store:عملیات Store (ایجاد):- یک رکورد جدید در جدول
tasks_categoriesدرجایجادمیشود.میکند. - فیلد
branchاز ریکوئست،userازبا شناسه اپراتورلاگین شده،جاری و فیلدبا شناسه شعبه جاری پر میشود.title/color/iconbranch - اطلاعات ظاهری (عنوان، رنگ، آیکون) از آرایه
dataخواندهدریافتمیشوند. شناسه رکورد درج شده (Insert ID) گرفته میشود اما در خروجی برگردانده نمیمیشود.
- یک رکورد جدید در جدول
update:عملیات Update (ویرایش):- رکورد مربوط به
idارسالی را در جدولtasks_categoriesکهپیدا کرده و فیلدهای،idtitlecolorآن برابر باوrequest->id$iconاستراآپدیتبهروزرسانیمیشود. هیچ شرط دیگری (مثل بررسی شعبه) در کوئری وجود ندارد.میکند.
- رکورد مربوط به
delete:عملیات Delete (حذف کامل و آبشاری):- ابتدا
رکوردخوداصلیدستهبندی را از جدولtasks_categoriesحذفمیشود.میکند. - سپس تمام
تسکهای زیرمجموعه این دستهبندی را از جدولidtasks_itemsکه مربوط به این دسته هستند (where('category', $request->id)) استخراج میشوند. سپس تمام رکوردهایtasks_itemsمربوطهحذفمیشوند.میکند.- در
نهایتنهایت،تمامتمامیرکوردهاییادداشتها (Notes) مرتبط با آن تسکهای حذف شده را نیز از جدولtasks_notesکهپاکمربوطمیکندبهتاتسکهایدیتایاستخراج شده هستند حذف میشوندیتیم (حذفOrphanدستیData)ارتباطات).باقی نماند.
- ابتدا
پاسخ:در صورت موفقیت آرایهای شامل وضعیت و زمان سرور برمیگرداند.ساختارپارامترهای ورودیمورد(InputانتظارParameters)سیستمانتظارداردورودیهادقیقاًبهنام اینپارامترشکلنوع ارسالالزامی؟ شوندتوضیحات (درغیراینصورتواردaction بلوکString بله نوع عملیات: ,catchstoreupdate,delete.id Integer شرطی برای updateمیشود):وPOST /api/v2/tasks/category/operation Authorization: Bearer <JWT> { "action": "store", // الزامی: store | update |deleteالزامی است."id": 10, //data Array شرطی برای updatestoreوdelete "branch": 1001, //updateالزامی(معمولااست.توسطحاویکلاینتاطلاعاتیادستهبندی.میدلورستمیشود)"data"ساختار آرایه
data:{// الزامی (حتی برای delete باید ارسال شود وگرنه کد کرش میکند)"title": "جلسات"عنوان دستهبندی",// الزامی برای store و update"color": "#ffffff"#FF0000", //الزامیکدبرایرنگstore و updateHEX "icon": "fa-user"list" //الزامیکلاسبرایآیکونstore(مثلاًو update }FontAwesome) }نمونه خروجی
واقعی(Response)در صورت موفقیت
آمیز:عملیات:{ "status": true, "time":17320370001732615200 }در صورت بروز خطا (Exception):
شامل متن دقیق خطای PHP و Stack Trace کامل برای دیباگ.{ "status": false, "time":1732037005,1732615200, "message": "TryingErrortomessageaccess array offset on value of type null"description",// مثال اگر data ارسال نشود"trace": [ ... ] }عملیات دیتابیس (Direct DB Manipulation)این متد مستقیماً با جداول زیر درگیر است:tasks_categories(Insert, Update, Delete)tasks_items(Select, Delete)tasks_notes(Delete)
نکات فنی و خطاهای محتملوابستگی به آرایه data:در خط اول متد$data = $request->dataاجرا میشود. اگر کلاینت پارامترdataرا نفرستد، کد متوقف نمیشود اما در خطوط بعدی (مثلا$data['title']) خطا میدهد.حذف بدون Transaction:عملیات حذف در ۳ مرحله انجام میشود. اگر در مرحله حذفtasks_itemsخطایی رخ دهد، دستهبندی حذف شده اما نوتها باقی میمانند (Partial Delete Risk).عدم بررسی مالکیت (Ownership):کوئریهای Update و Delete فقطidرا چک میکنند. این یعنی کد اجازه میدهد دستهبندی متعلق به یک شعبه دیگر، توسط کاربری در شعبه متفاوت ویرایش شود (صرفاً با داشتن ID).