withRouting( web: __DIR__.'/../routes/web.php', api: __DIR__.'/../routes/api.php', apiPrefix: 'api/v1', commands: __DIR__.'/../routes/console.php', health: '/up', ) ->withMiddleware(function (Middleware $middleware) { $middleware->statefulApi(); $middleware->alias([ 'role' => \App\Http\Middleware\EnsureUserHasRole::class, ]); $middleware->redirectGuestsTo(function (Request $request) { return $request->is('api/*') ? null : null; }); }) ->withExceptions(function (Exceptions $exceptions) { $exceptions->shouldRenderJsonWhen(function (Request $request) { return $request->is('api/*') || $request->expectsJson(); }); $exceptions->render(function (ValidationException $e, Request $request) { if ($request->is('api/*') || $request->expectsJson()) { return ApiResponse::error( 'Validation failed', $e->errors(), Response::HTTP_UNPROCESSABLE_ENTITY, ); } }); $exceptions->render(function (AuthenticationException $e, Request $request) { if ($request->is('api/*') || $request->expectsJson()) { return ApiResponse::error('Unauthenticated', null, Response::HTTP_UNAUTHORIZED); } }); $exceptions->render(function (NotFoundHttpException $e, Request $request) { if ($request->is('api/*') || $request->expectsJson()) { return ApiResponse::error('Resource not found', null, Response::HTTP_NOT_FOUND); } }); $exceptions->render(function (HttpExceptionInterface $e, Request $request) { if ($request->is('api/*') || $request->expectsJson()) { return ApiResponse::error( $e->getMessage() ?: 'Request failed', null, $e->getStatusCode(), ); } }); })->create();