middleware('auth:api'); // Directorio de usuarios (admin) — self-service para uno mismo, permiso users.* para el resto. // "/users/trashed" tiene que registrarse ANTES de la apiResource: si no, Laravel // intenta bindear "trashed" como {user} de la ruta show y nunca llega acá. Route::get('/users/trashed', [UserController::class, 'trashed']); Route::get('/users/pending', [UserController::class, 'pending']); Route::post('/users/{id}/restore', [UserController::class, 'restore'])->whereNumber('id'); Route::delete('/users/{id}/force', [UserController::class, 'forceDelete'])->whereNumber('id'); Route::apiResource('users', UserController::class); Route::post('/users/{user}/approve', [UserController::class, 'approve']); Route::get('/users/{user}/app-roles', [UserController::class, 'appRoles']); Route::post('/users/{user}/app-roles', [UserController::class, 'assignAppRole']); Route::delete('/users/{user}/app-roles/{clientId}/{role}', [UserController::class, 'revokeAppRole']); // Apps registradas en el sistema (admin, para el selector de roles-por-app). Route::get('/apps', [AppController::class, 'index']); // Analíticas de uso: sesiones, logins por app, actividad reciente. Route::get('/analytics/summary', [AnalyticsController::class, 'summary']); // Cuenta propia: clientes OAuth, personal access tokens y apps autorizadas. // Todo esto es lo mismo que ofrece la SPA Vue por sesión (routes/web.php), pero // vía Bearer token — para que cualquier cliente (Angular, Flutter, etc.) pueda // construir su propio panel sin depender de la sesión de Laravel. Route::apiResource('clients', ClientController::class)->except(['show'])->names('api.clients'); Route::get('/personal-access-tokens', [PersonalAccessTokenController::class, 'index']); Route::post('/personal-access-tokens', [PersonalAccessTokenController::class, 'store']); Route::delete('/personal-access-tokens/{tokenId}', [PersonalAccessTokenController::class, 'destroy']); Route::get('/authorized-apps', [AuthorizedAppController::class, 'index']); Route::delete('/authorized-apps/{tokenId}', [AuthorizedAppController::class, 'destroy']);