group(function () { // Public Routes Route::post('/login', [AuthController::class, 'login']); Route::post('/register', [AuthController::class, 'register']); Route::get('/statistics/public', [StatisticsController::class, 'getPublicStats']); Route::get('/leaderboard', [StatisticsController::class, 'getLeaderboard']); // Authenticated Routes Route::middleware(['auth:sanctum', 'throttle:60,1'])->group(function () { Route::post('/logout', [AuthController::class, 'logout']); Route::post('/coin-purchases', [CoinPurchaseController::class, 'store']); Route::get('/statistics/me', [StatisticsController::class, 'getPersonalStats']); Route::prefix('users/me')->group(function () { Route::get('/', [ProfileController::class, 'show']); Route::put('/', [ProfileController::class, 'update']); Route::patch('/password', [ProfileController::class, 'updatePassword']); Route::delete('/', [ProfileController::class, 'destroy']); Route::get('/coins', [ProfileController::class, 'getCoins']); Route::put('/password', [ ProfileController::class, 'updatePassword', ]); Route::post('/avatar', [ProfileController::class, 'uploadAvatar']); Route::get('/transactions', [UserController::class, 'getMyTransactions']); }); // User Resources Route::prefix('/users')->group(function () { Route::get('/{user}', [UserController::class, 'show']); Route::get('/{user}/transactions', [UserController::class, 'getTransactions']); Route::get('/{user}/games', [UserController::class, 'getGames']); Route::get('/{user}/matches', [UserController::class, 'getMatches']); }); Route::prefix('games')->group(function () { Route::post('host', [GameController::class, 'host']); Route::get('open', [GameController::class, 'open']); Route::get('/', [GameController::class, 'index']); Route::get('/{game}', [GameController::class, 'show']); Route::post('/', [GameController::class, 'store']); Route::put('/{game}', [GameController::class, 'update']); Route::delete('/{game}', [GameController::class, 'destroy']); Route::post('/{game}/resign', [GameController::class, 'resign']); Route::post('/{game}/join', [GameController::class, 'join']); }); Route::prefix('matches')->group(function () { Route::post('host', [MatchController::class, 'host']); Route::get('open', [MatchController::class, 'open']); Route::post('/{match}/join', [MatchController::class, 'join']); Route::post('/{match}/start', [MatchController::class, 'start']); // Changed to /start to be explicit Route::delete('/{match}', [MatchController::class, 'destroy']); Route::apiResource('/', MatchController::class)->parameters(['' => 'match']); }); // Admin Routes Route::middleware('user.type:A') ->prefix('admin') ->group(function () { Route::get('/statistics', [StatisticsController::class, 'getAdminStats']); Route::get('/transactions', [TransactionController::class, 'index']); Route::get('/games', [GameController::class, 'index']); Route::get('/matches', [MatchController::class, 'index']); Route::prefix('users')->group(function () { Route::get('/', [UserController::class, 'index']); Route::post('/', [UserController::class, 'store']); Route::put('/{user}', [UserController::class, 'update']); Route::delete('/{user}', [ UserController::class, 'destroy', ]); Route::post('/{user}/block', [ UserController::class, 'block', ]); Route::post('/{user}/unblock', [ UserController::class, 'unblock', ]); }); }); }); });