bookclub-manager/app/Http/Controllers/DeadlineController.php

105 lines
3.2 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\Deadline;
use App\Models\UserDeadline;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class DeadlineController extends Controller
{
public function index()
{
$userId = Auth::id();
$deadlines = Deadline::with(['bookRecommendation' => 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.']);
}
}