feat: get current level

This commit is contained in:
Leon 2026-01-09 12:14:22 +01:00
parent 45f5413c52
commit c3246a0ec1
2 changed files with 25 additions and 1 deletions

View File

@ -59,6 +59,9 @@ class AuthController extends Controller
$this->resolveDeviceName($data) $this->resolveDeviceName($data)
)->plainTextToken; )->plainTextToken;
$user->updateLevel();
$user->load('currentLevel');
return response()->json([ return response()->json([
'token' => $token, 'token' => $token,
'token_type' => 'Bearer', 'token_type' => 'Bearer',
@ -68,7 +71,11 @@ class AuthController extends Controller
public function me(Request $request): JsonResponse public function me(Request $request): JsonResponse
{ {
/** @var \App\Models\User $user */
$user = $request->user(); $user = $request->user();
$user->updateLevel();
$user->load('currentLevel');
return response()->json($user); return response()->json($user);
} }

View File

@ -6,6 +6,7 @@ namespace App\Models;
use App\Enums\UserRole; use App\Enums\UserRole;
use Filament\Models\Contracts\HasName; use Filament\Models\Contracts\HasName;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable; use Illuminate\Notifications\Notifiable;
@ -45,7 +46,6 @@ class User extends Authenticatable implements HasName, FilamentUser
'password', 'password',
'role', 'role',
'xp', 'xp',
'level',
'avatar_uri', 'avatar_uri',
'participations', 'participations',
'victories', 'victories',
@ -82,6 +82,23 @@ class User extends Authenticatable implements HasName, FilamentUser
->withPivot(['current_step_number', 'status']) ->withPivot(['current_step_number', 'status'])
->withTimestamps(); ->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 public function getFilamentName(): string
{ {
return $this->username; return $this->username;