group(function () { Route::post('logout', [AuthController::class, 'logout']); Route::prefix('users')->group(function () { Route::get('/me', function (Request $request) { return $request->user(); }); // Update user profile (name and nickname) Route::put('/me', function (Request $request) { $request->validate([ 'name' => 'required|string|max:255', 'nickname' => 'required|string|max:255|unique:users,nickname,' . $request->user()->id, ]); $user = $request->user(); $user->name = $request->name; $user->nickname = $request->nickname; $user->save(); return response()->json($user); }); // Change password Route::put('/me/password', function (Request $request) { $request->validate([ 'current_password' => 'required', 'new_password' => 'required|min:8|confirmed', ]); $user = $request->user(); if (!\Hash::check($request->current_password, $user->password)) { return response()->json([ 'message' => 'Current password is incorrect' ], 422); } $user->password = \Hash::make($request->new_password); $user->save(); return response()->json([ 'message' => 'Password changed successfully' ]); }); // Upload avatar Route::post('/me/avatar', function (Request $request) { $request->validate([ 'avatar' => 'required|image|mimes:jpeg,png,jpg,gif|max:2048', ]); $user = $request->user(); // Delete old avatar if exists if ($user->photo_avatar_filename) { \Storage::disk('public')->delete('photos_avatars/' . $user->photo_avatar_filename); } // Store new avatar $file = $request->file('avatar'); $filename = str_pad($user->id, 5, '0', STR_PAD_LEFT) . '_' . \Str::random(10) . '.' . $file->extension(); $file->storeAs('photos_avatars', $filename, 'public'); $user->photo_avatar_filename = $filename; $user->save(); return response()->json($user); }); // Delete account Route::delete('/me', function (Request $request) { $user = $request->user(); $user->tokens()->delete(); $user->delete(); return response()->json([ 'message' => 'Account deleted successfully' ]); }); Route::get('/{user}/matches', [UserController::class, 'getMatches']); }); Route::prefix('games')->group(function () { Route::apiResource('/', GameController::class)->parameters(['' => 'game']); Route::post('/{game}/resign', [GameController::class, 'resign']); Route::post('/{game}/join', [GameController::class, 'join']); }); Route::prefix('matches')->group(function () { Route::apiResource('/', MatchController::class)->parameters(['' => 'match']); Route::post('/{match}/join', [MatchController::class, 'join']); }); });