PM_Console/backend/app/Http/Controllers/Api/SubtaskController.php

126 خطوط
4.2 KiB
PHP

<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Http\Resources\SubtaskResource;
use App\Models\Subtask;
use App\Models\Task;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class SubtaskController extends Controller
{
public function index(Request $request, Task $task): JsonResponse
{
try {
$subtasks = $task->subtasks()->with('assignee')->orderBy('position')->get();
return response()->json([
'success' => true,
'data' => SubtaskResource::collection($subtasks),
'message' => 'لیست زیروظایف',
]);
} catch (\Exception $e) {
return response()->json([
'success' => false,
'message' => 'خطا در دریافت زیروظایف',
], 500);
}
}
public function store(Request $request, Task $task): JsonResponse
{
try {
$request->validate([
'title' => 'required|string|max:255',
'description' => 'nullable|string',
'assignee_id' => 'nullable|exists:users,id',
'due_date' => 'nullable|date',
'position' => 'nullable|integer',
]);
$data = $request->only(['title', 'description', 'assignee_id', 'due_date', 'position']);
$data['task_id'] = $task->id;
$data['status'] = 'todo';
$subtask = Subtask::create($data);
$subtask->load('assignee');
return response()->json([
'success' => true,
'data' => new SubtaskResource($subtask),
'message' => 'زیروظیفه ایجاد شد',
], 201);
} catch (\Exception $e) {
return response()->json([
'success' => false,
'message' => 'خطا در ایجاد زیروظیفه',
], 500);
}
}
public function update(Request $request, Subtask $subtask): JsonResponse
{
try {
$request->validate([
'title' => 'sometimes|required|string|max:255',
'description' => 'nullable|string',
'assignee_id' => 'nullable|exists:users,id',
'due_date' => 'nullable|date',
'position' => 'nullable|integer',
]);
$subtask->update($request->only(['title', 'description', 'assignee_id', 'due_date', 'position']));
$subtask->load('assignee');
return response()->json([
'success' => true,
'data' => new SubtaskResource($subtask->fresh()),
'message' => 'زیروظیفه به‌روزرسانی شد',
]);
} catch (\Exception $e) {
return response()->json([
'success' => false,
'message' => 'خطا در به‌روزرسانی زیروظیفه',
], 500);
}
}
public function destroy(Subtask $subtask): JsonResponse
{
try {
$subtask->delete();
return response()->json([
'success' => true,
'message' => 'زیروظیفه حذف شد',
]);
} catch (\Exception $e) {
return response()->json([
'success' => false,
'message' => 'خطا در حذف زیروظیفه',
], 500);
}
}
public function updateStatus(Request $request, Subtask $subtask): JsonResponse
{
try {
$request->validate(['status' => 'required|string']);
$subtask->update(['status' => $request->status]);
$subtask->load('assignee');
return response()->json([
'success' => true,
'data' => new SubtaskResource($subtask->fresh()),
'message' => 'وضعیت زیروظیفه به‌روزرسانی شد',
]);
} catch (\Exception $e) {
return response()->json([
'success' => false,
'message' => 'خطا در به‌روزرسانی وضعیت',
], 500);
}
}
}