Wire admin studio SSR and search infrastructure

This commit is contained in:
2026-05-01 11:46:06 +02:00
parent 257b0dbef6
commit 18cea8b0f0
329 changed files with 197465 additions and 2741 deletions

View File

@@ -3,12 +3,14 @@
use App\Http\Middleware\ConditionalShareErrorsFromSession;
use App\Http\Middleware\ConditionalStartSession;
use App\Http\Middleware\ConditionalValidateCsrfToken;
use Illuminate\Auth\AuthenticationException;
use Illuminate\Session\Middleware\StartSession;
use Illuminate\Foundation\Http\Middleware\ValidateCsrfToken;
use Illuminate\View\Middleware\ShareErrorsFromSession;
use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;
use Sentry\Laravel\Integration;
return Application::configure(basePath: dirname(__DIR__))
->withRouting(
@@ -28,6 +30,7 @@ return Application::configure(basePath: dirname(__DIR__))
$middleware->validateCsrfTokens(except: [
'chat_post',
'chat_post/*',
'api/art/*/view',
]);
$middleware->web(append: [
@@ -43,6 +46,7 @@ return Application::configure(basePath: dirname(__DIR__))
$middleware->alias([
'artwork.maturity.access' => \App\Http\Middleware\EnsureArtworkMaturityAccess::class,
'admin.moderation' => \App\Http\Middleware\EnsureAdminOrModerator::class,
'admin.access' => \App\Http\Middleware\EnsureStaffAccess::class,
'creator.access' => \App\Http\Middleware\EnsureCreatorAccess::class,
'ensure.email.login.upgrade'=> \App\Http\Middleware\EnsureEmailLoginUpgradeComplete::class,
'ensure.onboarding.complete'=> \App\Http\Middleware\EnsureOnboardingComplete::class,
@@ -56,8 +60,20 @@ return Application::configure(basePath: dirname(__DIR__))
]);
})
->withExceptions(function (Exceptions $exceptions): void {
Integration::handles($exceptions);
// ── 404 / 410 / 403 — web HTML responses only ─────────────────────────
$exceptions->render(function (
AuthenticationException $e,
\Illuminate\Http\Request $request
) {
if ($request->expectsJson()) {
return null;
}
return redirect()->to(route('login'));
});
// ── HTML HTTP errors — use Nova-styled templates when possible ───────
$exceptions->render(function (
\Symfony\Component\HttpKernel\Exception\HttpException $e,
\Illuminate\Http\Request $request
@@ -68,24 +84,29 @@ return Application::configure(basePath: dirname(__DIR__))
$status = $e->getStatusCode();
// 403 and 401 use their generic Blade views — no extra data needed.
if ($status === 403) {
return response(view('errors.403', ['message' => $e->getMessage() ?: null]), 403);
}
if ($status === 401) {
return response(view('errors.401'), 401);
}
if ($status === 410) {
return response(view('errors.410'), 410);
}
// Generic 404 — smart URL-pattern routing to contextual views.
if ($status === 404) {
return app(\App\Http\Controllers\Web\ErrorController::class)
->handleNotFound($request);
}
return null; // Fallback to Laravel's default.
$view = view()->exists("errors.{$status}")
? "errors.{$status}"
: 'errors.http';
$data = $view === 'errors.http'
? [
'error_code' => $status,
'error_title' => \Symfony\Component\HttpFoundation\Response::$statusTexts[$status] ?? 'Unexpected Error',
'error_message' => $e->getMessage() ?: 'Something went wrong while loading this page.',
]
: [];
if ($status === 403) {
$data['message'] = $e->getMessage() ?: null;
}
return response()->view($view, $data, $status, $e->getHeaders());
});
// ── ModelNotFoundException → contextual 404 on web ───────────────────