feat: Add user level and experience attributes, and implement reward, task, and quest models with corresponding controllers and migrations
This commit is contained in:
parent
aa50740dcb
commit
fd20278948
17 changed files with 963 additions and 112 deletions
70
backend/app/Http/Controllers/QuestController.php
Normal file
70
backend/app/Http/Controllers/QuestController.php
Normal 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
|
||||
]);
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue