126 خطوط
4.2 KiB
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);
|
|
}
|
|
}
|
|
}
|