feat: Add user level and experience attributes, and implement reward, task, and quest models with corresponding controllers and migrations

This commit is contained in:
Jonas Pfalzgraf 2024-12-16 09:00:57 +01:00
parent aa50740dcb
commit fd20278948
17 changed files with 963 additions and 112 deletions

View file

@ -0,0 +1,70 @@
<?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
]);
}
}