From c3246a0ec1aad29d4a754882792e3bb019132fc5 Mon Sep 17 00:00:00 2001 From: Leon Date: Fri, 9 Jan 2026 12:14:22 +0100 Subject: [PATCH] feat: get current level --- app/Http/Controllers/AuthController.php | 7 +++++++ app/Models/User.php | 19 ++++++++++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/app/Http/Controllers/AuthController.php b/app/Http/Controllers/AuthController.php index 5220c2c..42233af 100644 --- a/app/Http/Controllers/AuthController.php +++ b/app/Http/Controllers/AuthController.php @@ -59,6 +59,9 @@ class AuthController extends Controller $this->resolveDeviceName($data) )->plainTextToken; + $user->updateLevel(); + $user->load('currentLevel'); + return response()->json([ 'token' => $token, 'token_type' => 'Bearer', @@ -68,7 +71,11 @@ class AuthController extends Controller public function me(Request $request): JsonResponse { + /** @var \App\Models\User $user */ $user = $request->user(); + $user->updateLevel(); + $user->load('currentLevel'); + return response()->json($user); } diff --git a/app/Models/User.php b/app/Models/User.php index e2d9702..0355d5c 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -6,6 +6,7 @@ namespace App\Models; use App\Enums\UserRole; use Filament\Models\Contracts\HasName; use Illuminate\Database\Eloquent\Factories\HasFactory; +use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; @@ -45,7 +46,6 @@ class User extends Authenticatable implements HasName, FilamentUser 'password', 'role', 'xp', - 'level', 'avatar_uri', 'participations', 'victories', @@ -82,6 +82,23 @@ class User extends Authenticatable implements HasName, FilamentUser ->withPivot(['current_step_number', 'status']) ->withTimestamps(); } + + public function currentLevel(): BelongsTo + { + return $this->belongsTo(Level::class, 'level_id'); + } + + public function updateLevel(): void + { + $level = Level::where('xpThreshold', '<=', $this->xp) + ->orderBy('xpThreshold', 'desc') + ->first(); + + if ($level && $this->level_id !== $level->id) { + $this->level_id = $level->id; + $this->save(); + } + } public function getFilamentName(): string { return $this->username;