generated from Flycro/laravel-nuxt
feat: Deadline Functionality
parent
5ab2c46335
commit
b97f8c785f
|
|
@ -0,0 +1,104 @@
|
|||
<?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.']);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class Deadline extends Model
|
||||
{
|
||||
use HasFactory;
|
||||
|
||||
protected $fillable = [
|
||||
'book_recommendation_id',
|
||||
'deadline',
|
||||
'target_page',
|
||||
'target_chapter',
|
||||
];
|
||||
|
||||
public function bookRecommendation()
|
||||
{
|
||||
return $this->belongsTo(BookRecommendation::class);
|
||||
}
|
||||
public function userDeadlines()
|
||||
{
|
||||
return $this->hasMany(UserDeadline::class);
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue