app->bind(MovieProvider::class, function () { $provider = config('movies.provider', 'tmdb'); return match ($provider) { 'tmdb' => new TmdbMovieProvider(), 'omdb' => new OmdbMovieProvider(), default => new TmdbMovieProvider(), }; }); // Bind service interfaces to implementations $this->app->bind(ListMoviesServiceInterface::class, ListMoviesService::class); $this->app->bind(ShowMovieServiceInterface::class, ShowMovieService::class); $this->app->bind(UpsertMovieServiceInterface::class, UpsertMovieFromProvider::class); $this->app->bind(CheckMovieExistsServiceInterface::class, CheckMovieExistsService::class); // Entity services $this->app->bind(GetActorWithMoviesServiceInterface::class, GetActorWithMoviesService::class); $this->app->bind(GetDirectorWithMoviesServiceInterface::class, GetDirectorWithMoviesService::class); $this->app->bind(GetStudioWithMoviesServiceInterface::class, GetStudioWithMoviesService::class); $this->app->bind(GetGenreWithMoviesServiceInterface::class, GetGenreWithMoviesService::class); // Admin management services $this->app->bind(UpdateMovieServiceInterface::class, UpdateMovieService::class); $this->app->bind(DeleteMovieServiceInterface::class, DeleteMovieService::class); } public function boot(): void { // Module routes Route::middleware(['web', 'auth', 'verified']) ->prefix('admin/movies') ->as('admin.movies.') ->group(__DIR__ . '/../routes/admin.php'); // Public API (JSON) routes Route::middleware(['web']) ->prefix('api/movies') ->as('api.movies.') ->group(__DIR__ . '/../routes/api.php'); // Entity API routes (actors/directors/studios/genres) Route::middleware(['web']) ->prefix('api') ->as('api.movies.entities.') ->group(function () { Route::prefix('actors')->as('actors.')->group(__DIR__ . '/../routes/api_actors.php'); Route::prefix('directors')->as('directors.')->group(__DIR__ . '/../routes/api_directors.php'); Route::prefix('studios')->as('studios.')->group(__DIR__ . '/../routes/api_studios.php'); Route::prefix('genres')->as('genres.')->group(__DIR__ . '/../routes/api_genres.php'); }); // Public Inertia pages Route::middleware(['web']) ->prefix('movies') ->as('movies.') ->group(__DIR__ . '/../routes/pages.php'); // Entity Inertia pages Route::middleware(['web']) ->as('entities.pages.') ->group(function () { Route::prefix('actors')->as('actors.')->group(__DIR__ . '/../routes/pages_actors.php'); Route::prefix('directors')->as('directors.')->group(__DIR__ . '/../routes/pages_directors.php'); Route::prefix('studios')->as('studios.')->group(__DIR__ . '/../routes/pages_studios.php'); Route::prefix('genres')->as('genres.')->group(__DIR__ . '/../routes/pages_genres.php'); }); } }