app->bind(NewsletterSyncClient::class, NullNewsletterSyncClient::class); $this->app->singleton(PressReleaseService::class); $this->app->singleton(AdminRequestPerformanceMetrics::class); } /** * Bootstrap any application services. */ public function boot(): void { $scheme = request()->header('X-Forwarded-Proto') ?? request()->server('HTTP_X_FORWARDED_PROTO') ?? (request()->secure() ? 'https' : 'http'); if ($scheme === 'https') { URL::forceScheme('https'); } // Stripe Tax berechnet die USt im Checkout automatisch nach den // gleichen Regeln wie der VatResolver im MAN-Kreis (DE mit Steuer, // EU nur mit USt-ID befreit, Drittland befreit). Aktiviert zugleich // die USt-ID-Abfrage im Stripe Checkout. Cashier::calculateTaxes(); AdminPreset::observe(AdminPerformanceCacheObserver::class); Category::observe(AdminPerformanceCacheObserver::class); CategoryTranslation::observe(AdminPerformanceCacheObserver::class); Company::observe(AdminPerformanceCacheObserver::class); Contact::observe(AdminPerformanceCacheObserver::class); NewsletterSubscription::observe(AdminPerformanceCacheObserver::class); PressRelease::observe(AdminPerformanceCacheObserver::class); User::observe(AdminPerformanceCacheObserver::class); Permission::observe(AdminPerformanceCacheObserver::class); Role::observe(AdminPerformanceCacheObserver::class); DB::listen(fn (QueryExecuted $query) => app(AdminRequestPerformanceMetrics::class)->record($query)); Livewire::addPersistentMiddleware([ EnsureUserIsAdmin::class, LogSlowAdminRequests::class, ]); } /** * Set the asset URL dynamically based on the current theme */ protected function setDynamicAssetUrl(): void { try { $assetUrl = ThemeHelper::getAssetUrl(); config(['app.asset_url' => $assetUrl]); } catch (\Exception $e) { // Fallback to default if theme detection fails config(['app.asset_url' => 'https://assets.pressekonto.test']); } } }