ADHD-Home-Quest/backend/app/Http/Controllers/QuestController.php

70 lines
2 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\Quest;
use App\Models\Task;
use Illuminate\Http\Request;
class QuestController extends Controller
{
public function index(Request $request)
{
$quests = Quest::where('user_id', $request->user()->id)->where('is_completed', false)->get();
return response()->json($quests);
}
public function generate(Request $request)
{
// Vereinfachte Logik: Nimmt die letzten 5 offenen Tasks und macht daraus Quests
$tasks = Task::where('user_id', $request->user()->id)->limit(5)->get();
$quests = [];
foreach ($tasks as $task) {
$quests[] = Quest::create([
'user_id' => $request->user()->id,
'task_id' => $task->id,
'title' => $task->title,
'category' => $task->category,
'due_date' => $task->due_date,
'xp_reward' => 50,
'is_completed' => false
]);
}
return response()->json($quests, 201);
}
public function complete(Request $request, $id)
{
$quest = Quest::where('user_id', $request->user()->id)->findOrFail($id);
if ($quest->is_completed) {
return response()->json(['message' => 'Quest already completed'], 400);
}
// Mark as completed
$quest->update(['is_completed' => true]);
$user = $request->user();
$user->xp += $quest->xp_reward;
// Level-Up Check (vereinfachte Logik)
$xpForNextLevel = $user->level * 100;
$levelUp = false;
while ($user->xp >= $xpForNextLevel) {
$user->level += 1;
$user->xp = $user->xp - $xpForNextLevel;
$xpForNextLevel = $user->level * 100;
$levelUp = true;
}
$user->save();
return response()->json([
'quest' => $quest,
'xp_gained' => $quest->xp_reward,
'new_level' => $user->level,
'level_up' => $levelUp
]);
}
}