validate([ 'todo_id' => 'exists:to_dos,id', ]); $user = $request->user(); TimeTracker::whereHas('toDo', fn ($q) => $q->where('user_id', $request->user()->id)) ->whereNull('end_at') ->update(['end_at' => now()]); $toDo = $user ->toDos() ->where('id', $data['todo_id']) ->first(); $timeTracker = $toDo->timeTrackers() ->create(['start_at' => now()]); $user->time_tracker_id = $timeTracker->id; $user->save(); return response()->json(new TimeTrackerResource($timeTracker->load('toDo')), 201); } /** * Display the specified resource. */ public function show(TimeTracker $timeTracker) { // } /** * Update the specified resource in storage. */ public function update(Request $request, TimeTracker $timeTracker) { // } /** * Remove the specified resource from storage. */ public function destroy(TimeTracker $timeTracker) { // } public function userTimeTracker(Request $request) { if (! $request->user()->currentTimeTracker) { return response()->noContent(); } return response()->json(new TimeTrackerResource($request->user()->currentTimeTracker?->load('toDo'))); } public function stopUserTimeTracker(Request $request) { $request->user()->currentTimeTracker()->update(['end_at' => now()]); $request->user()->time_tracker_id = null; $request->user()->save(); return response()->json([], 204); } public function toDoTimeTrackers(Request $request, ToDo $toDo) { abort_if($toDo->user_id !== $request->user()->id, 401, 'unauthoriez'); return response()->json(TimeTrackerResource::collection($toDo->timeTrackers->sortByDesc('start_at'))); } }