70 lines
2 KiB
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
|
|
]);
|
|
}
|
|
}
|