withRouting( web: __DIR__.'/../routes/web.php', api: __DIR__.'/../routes/api.php', commands: __DIR__.'/../routes/console.php', health: '/up', ) ->withMiddleware(function (Middleware $middleware): void { $middleware->alias([ 'adminapp.tenant' => EnsureAdminAppTenant::class, ]); $middleware->encryptCookies(except: [ 'guest_token', ]); $middleware->prepend(SetApiLocale::class); }) ->withExceptions(function (Exceptions $exceptions): void { $exceptions->shouldRenderJsonWhen( fn (Request $request) => $request->is('api/*'), ); $exceptions->render(function (AuthenticationException $exception, Request $request) { if (! $request->is('api/*')) { return null; } return response()->json([ 'code' => 'auth.unauthenticated', 'message' => __('api.auth.unauthenticated'), ], 401); }); $exceptions->render(function (AccountLockedException $exception, Request $request) { if (! $request->is('api/*')) { return null; } $retryAfter = $exception->retryAfterSeconds(); return response()->json([ 'code' => 'auth.account_locked', 'message' => __('api.auth.account_locked'), 'retry_after' => $retryAfter, 'locked_until' => $exception->lockedUntil->toIso8601String(), ], 429, [ 'Retry-After' => (string) $retryAfter, ]); }); $exceptions->render(function (AuthorizationException $exception, Request $request) { if (! $request->is('api/*')) { return null; } return response()->json([ 'code' => 'errors.forbidden', 'message' => __('api.errors.forbidden'), ], 403); }); $exceptions->render(function (ModelNotFoundException $exception, Request $request) { if (! $request->is('api/*')) { return null; } return response()->json([ 'code' => 'errors.not_found', 'message' => __('api.errors.not_found'), ], 404); }); $exceptions->render(function (TicketNotAvailableException $exception, Request $request) { if (! $request->is('api/*')) { return null; } return response()->json([ 'code' => 'ticket.not_available', 'message' => __('api.ticket.not_available'), ], 404); }); $exceptions->render(function (NotFoundHttpException $exception, Request $request) { if (! $request->is('api/*')) { return null; } return response()->json([ 'code' => 'errors.not_found', 'message' => __('api.errors.not_found'), ], 404); }); $exceptions->render(function (MethodNotAllowedHttpException $exception, Request $request) { if (! $request->is('api/*')) { return null; } return response()->json([ 'code' => 'errors.method_not_allowed', 'message' => __('api.errors.method_not_allowed'), ], 405, $exception->getHeaders()); }); })->create();