setupModels(); DB::prohibitDestructiveCommands(app()->isProduction()); EnsureFeaturesAreActive::whenInactive(fn () => throw new AuthorizationException(code: 403)); ParallelTesting::setUpTestDatabase(function (string $database, int $token): void { Artisan::call('db:seed', ['--class' => PermissionSeeder::class]); Artisan::call('db:seed', ['--class' => AdminSeeder::class]); Artisan::call('db:seed', ['--class' => ProhibitionSeeder::class]); }); Http::globalRequestMiddleware(fn (Request $request): MessageInterface => $request->withHeader('User-Agent', 'AnimeThemes')); DB::listen(function (QueryExecuted $query): void { if (app()->isLocal()) { Log::debug($query->sql); } }); } protected function setupModels(): void { Model::automaticallyEagerLoadRelationships(); Model::preventLazyLoading(); Model::handleLazyLoadingViolationUsing(function (Model $model, string $relation): void { $class = $model::class; Log::error("Attempted to lazy load '$relation' on model '$class'.", [ 'method' => request()->method(), 'full-url' => request()->fullUrl(), 'ip' => request()->ip(), 'headers' => request()->headers->all(), ]); }); Model::preventsAccessingMissingAttributes(); Model::handleMissingAttributeViolationUsing(function (Model $model, string $key): void { $class = $model::class; Log::error("Attribute '$key' does not exist or was not retrieved for model '$class'", [ 'method' => request()->method(), 'full-url' => request()->fullUrl(), 'ip' => request()->ip(), 'headers' => request()->headers->all(), ]); }); Relation::morphMap([ 'page' => Page::class, 'anime' => Anime::class, 'animetheme' => AnimeTheme::class, 'animethemeentry' => AnimeThemeEntry::class, 'artist' => Artist::class, 'audio' => Audio::class, 'image' => Image::class, 'performance' => Performance::class, 'resource' => ExternalResource::class, 'series' => Series::class, 'song' => Song::class, 'studio' => Studio::class, 'themegroup' => Group::class, 'video' => Video::class, 'videoscript' => VideoScript::class, // Pivot 'imageable' => Imageable::class, 'resourceable' => Resourceable::class, 'animeseries' => AnimeSeries::class, 'animestudio' => AnimeStudio::class, 'animethemeentryvideo' => AnimeThemeEntryVideo::class, 'artistmember' => ArtistMember::class, // Submission 'submission_anime' => SubmissionAnime::class, 'submission_anime_theme' => SubmissionAnimeTheme::class, 'submission_anime_theme_entry' => SubmissionAnimeThemeEntry::class, 'submission_artist' => SubmissionArtist::class, 'submission_artist_member' => SubmissionArtistMember::class, 'submission_performance' => SubmissionPerformance::class, 'submission_resource' => SubmissionExternalResource::class, 'submission_series' => SubmissionSeries::class, 'submission_song' => SubmissionSong::class, 'submission_studio' => SubmissionStudio::class, 'submission_synonym' => SubmissionSynonym::class, ]); } }