function ($query) { $query->where('status', 'active'); }, 'userDeadlines']) ->get(); $deadlines->each(function ($deadline) use ($userId) { UserDeadline::firstOrCreate([ 'user_id' => $userId, 'deadline_id' => $deadline->id, ], [ 'completed_at' => null, // Default value, indicating not completed ]); }); $deadlinesWithAllUserProgress = Deadline::with(['bookRecommendation', 'userDeadlines.user']) ->get(); return response()->json($deadlinesWithAllUserProgress); } public function deadlinesByBookRecommendation($bookRecommendationId) { $userId = Auth::id(); $refetch = false; $deadlines = Deadline::with(['userDeadlines' => function ($query) use ($userId) { $query->where('user_id', $userId); }, 'userDeadlines.user']) ->where('book_recommendation_id', $bookRecommendationId) ->get(); $deadlines->each(function ($deadline) use ($userId, &$refetch) { UserDeadline::firstOrCreate([ 'user_id' => $userId, 'deadline_id' => $deadline->id, ], [ 'completed_at' => null, // Default to not completed. ]); $refetch = true; }); if ($refetch) { $deadlines = Deadline::with(['userDeadlines' => function ($query) use ($userId) { $query->where('user_id', $userId); }, 'userDeadlines.user']) ->where('book_recommendation_id', $bookRecommendationId) ->get(); } return response()->json($deadlines); } public function createDeadline(Request $request) { $validated = $request->validate([ 'book_recommendation_id' => 'required|integer|exists:book_recommendations,id', 'deadline' => 'required|date', 'target_page' => 'nullable|integer', 'target_chapter' => 'nullable|string|max:255', ]); if (!(auth()->user()->hasRole('admin')) ) { return response()->json(['message' => 'Keine Berechtigung.'], 403); } $deadline = new Deadline($validated); $deadline->save(); return response()->json([ 'message' => 'Deadline created successfully.', 'deadline' => $deadline, ], 201); } public function updateUserDeadline(Request $request, $deadlineId) { $userId = Auth::id(); $userDeadline = UserDeadline::where('deadline_id', $deadlineId) ->where('user_id', $userId) ->firstOrFail(); $userDeadline->completed_at = now(); // Mark as completed $userDeadline->save(); return response()->json(['message' => 'Deadline marked as completed successfully.']); } }