mirror of
https://bitbucket.org/studiotem/jandl-taskmanager-app.git
synced 2026-10-21 14:29:34 +00:00
adding draft subtask logic to backend
This commit is contained in:
1 parent
570e29e5c4
commit
21ad81cee7
5 files changed
+136
-11
No files matched your search
@@ -30,6 +30,11 @@ class SubTaskController extends Controller
|
||||
return $this->indexOngoing($request);
|
||||
}
|
||||
|
||||
// draft tasks (koncepty)
|
||||
if (isset($parameters['type']) && $parameters['type'] == 'draft') {
|
||||
return $this->indexDrafts($request);
|
||||
}
|
||||
|
||||
$parameters['user_id'] = ($parameters['employee_id'] ?? null);
|
||||
|
||||
$validator = Validator::make($request->all(), [
|
||||
@@ -59,13 +64,15 @@ class SubTaskController extends Controller
|
||||
$query->where('team_id', $parameters['team_id']);
|
||||
})->get()->pluck('id')->toArray();
|
||||
|
||||
$subtasks = SubTask::whereIn('user_id', $userIdArray)
|
||||
$subtasks = SubTask::published()
|
||||
->whereIn('user_id', $userIdArray)
|
||||
->whereHas('timeblocks', function ($query) use ($start, $end) {
|
||||
$query->where('start', '>=', $start);
|
||||
$query->where('end', '<', $end);
|
||||
})->get();
|
||||
} elseif (isset($parameters['user_id'])) {
|
||||
$subtasks = SubTask::where('user_id', $parameters['user_id'])->whereHas('timeblocks',
|
||||
$subtasks = SubTask::published()
|
||||
->where('user_id', $parameters['user_id'])->whereHas('timeblocks',
|
||||
function ($query) use ($start, $end) {
|
||||
$query->where('start', '>', $start);
|
||||
$query->where('end', '<', $end);
|
||||
@@ -102,8 +109,11 @@ class SubTaskController extends Controller
|
||||
|
||||
$parameters['user_id'] = $parameters['employee_id'];
|
||||
|
||||
$subtasks = SubTask::where('user_id', $parameters['user_id'])->where('is_finished',
|
||||
0)->whereDoesntHave('timeblocks')->get();
|
||||
$subtasks = SubTask::published()
|
||||
->where('user_id', $parameters['user_id'])
|
||||
->where('is_finished', 0)
|
||||
->whereDoesntHave('timeblocks')
|
||||
->get();
|
||||
|
||||
return response()->json([
|
||||
'subtasks' => SubTaskResource::collection($subtasks)
|
||||
@@ -125,16 +135,42 @@ class SubTaskController extends Controller
|
||||
|
||||
$parameters['user_id'] = $parameters['employee_id'];
|
||||
|
||||
$subtasks = SubTask::where('user_id', $parameters['user_id'])->where('is_finished', 0)->get();
|
||||
$subtasks = SubTask::published()
|
||||
->where('user_id', $parameters['user_id'])
|
||||
->where('is_finished', 0)
|
||||
->get();
|
||||
|
||||
return response()->json([
|
||||
'subtasks' => SubTaskResource::collection($subtasks)
|
||||
], 200);
|
||||
}
|
||||
|
||||
/**
|
||||
* Zoznam všetkých konceptov (draftov)
|
||||
*/
|
||||
private function indexDrafts(Request $request)
|
||||
{
|
||||
$parameters = $request->query();
|
||||
|
||||
$query = SubTask::draft()
|
||||
->with(['mastertask', 'user', 'timeblocks', 'attachments'])
|
||||
->orderBy('created_at', 'desc');
|
||||
|
||||
// ak je zadané employee_id, filtrovať podľa neho
|
||||
if (isset($parameters['employee_id'])) {
|
||||
$query->where('user_id', $parameters['employee_id']);
|
||||
}
|
||||
|
||||
return response()->json([
|
||||
'subtasks' => SubTaskResource::collection($query->get())
|
||||
], 200);
|
||||
}
|
||||
|
||||
public function store($mastertask_id, Request $request)
|
||||
{
|
||||
// zistenie, či ide o draft
|
||||
$isDraft = isset($request->all()['data']['is_draft']) && $request->all()['data']['is_draft'] == true;
|
||||
|
||||
$validator = Validator::make($request->all(), [
|
||||
'data.employees' => 'required',
|
||||
]);
|
||||
@@ -173,6 +209,7 @@ class SubTaskController extends Controller
|
||||
$data['data']['employees'][$key]['created_by'] = User::getUserIdFromBearerToken($request->bearerToken());
|
||||
$data['data']['employees'][$key]['description'] = $request->all()['data']['description'];
|
||||
$data['data']['employees'][$key]['deadline'] = $request->all()['data']['deadline'];
|
||||
$data['data']['employees'][$key]['is_draft'] = $isDraft;
|
||||
}
|
||||
|
||||
$request->merge($data);
|
||||
@@ -203,9 +240,11 @@ class SubTaskController extends Controller
|
||||
}
|
||||
}
|
||||
|
||||
$message = $isDraft ? 'Draft created successfully' : 'Sub Task created successfully';
|
||||
|
||||
return response()->json([
|
||||
'message' => 'Sub Task created successfully',
|
||||
'subtasks' => $subtasks
|
||||
'message' => $message,
|
||||
'subtasks' => SubTaskResource::collection($subtasks)
|
||||
], 201);
|
||||
}
|
||||
|
||||
@@ -214,6 +253,12 @@ class SubTaskController extends Controller
|
||||
{
|
||||
$subtask = SubTask::find($id);
|
||||
|
||||
if (!$subtask) {
|
||||
return response()->json([
|
||||
'message' => 'Subtask not found.'
|
||||
], 404);
|
||||
}
|
||||
|
||||
// ak je sub task v stave ukončený, nedovolime update. vynimkou je iba znovuotvorenie mastertasku
|
||||
if ($subtask->is_finished == 1 && isset($request->all()['data']['is_finished']) && $request->all()['data']['is_finished'] == 1) {
|
||||
return response()->json([
|
||||
@@ -228,6 +273,27 @@ class SubTaskController extends Controller
|
||||
], 400);
|
||||
}
|
||||
|
||||
// validácia pri publikovaní draftu (is_draft: false)
|
||||
$isPublishing = $subtask->is_draft && isset($request->all()['data']['is_draft']) && $request->all()['data']['is_draft'] == false;
|
||||
if ($isPublishing) {
|
||||
$publishValidator = Validator::make([
|
||||
'master_task_id' => $subtask->master_task_id,
|
||||
'user_id' => $request->all()['data']['employee_id'] ?? $subtask->user_id,
|
||||
'estimated_time' => $request->all()['data']['duration'] ?? $subtask->estimated_time,
|
||||
], [
|
||||
'master_task_id' => 'required',
|
||||
'user_id' => 'required',
|
||||
'estimated_time' => 'required|numeric|min:0',
|
||||
]);
|
||||
|
||||
if ($publishValidator->fails()) {
|
||||
return response()->json([
|
||||
'message' => 'Draft cannot be published. Missing required fields.',
|
||||
'errors' => $publishValidator->errors()
|
||||
], 400);
|
||||
}
|
||||
}
|
||||
|
||||
$validator = Validator::make($request->all(), [
|
||||
'data.duration' => 'required',
|
||||
]);
|
||||
@@ -254,6 +320,11 @@ class SubTaskController extends Controller
|
||||
$data['data']['deadline'] = isset($request->all()['data']['deadline']) ? $request->all()['data']['deadline'] : null;
|
||||
$data['data']['estimated_time'] = $request->all()['data']['duration'];
|
||||
$data['data']['updated_by'] = User::getUserIdFromBearerToken($request->bearerToken());
|
||||
|
||||
// publikovanie draftu
|
||||
if (isset($request->all()['data']['is_draft'])) {
|
||||
$data['data']['is_draft'] = $request->all()['data']['is_draft'];
|
||||
}
|
||||
|
||||
$request->merge($data);
|
||||
|
||||
@@ -276,8 +347,10 @@ class SubTaskController extends Controller
|
||||
$subtask->syncTimeblocks($data['data']['timeblocks']);
|
||||
}
|
||||
|
||||
$message = $isPublishing ? 'Draft published successfully' : 'Subtask updated successfully';
|
||||
|
||||
return response()->json([
|
||||
'message' => 'Subtask updated successfully',
|
||||
'message' => $message,
|
||||
'subtask' => new SubTaskResource($subtask)
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@ class SubTaskResource extends JsonResource
|
||||
{
|
||||
return [
|
||||
'id' => $this->id,
|
||||
'is_draft' => $this->is_draft,
|
||||
'type' => $this->type,
|
||||
'created_by' => $this->created_by,
|
||||
'master_task' => $this->mastertask->title,
|
||||
|
||||
Reference in new issue
Block a user