96 lines
4.7 KiB
PHP
96 lines
4.7 KiB
PHP
<?php
|
|
|
|
namespace App\Modules\Movies\Providers;
|
|
|
|
use Illuminate\Support\ServiceProvider;
|
|
use Illuminate\Support\Facades\Route;
|
|
use App\Modules\Movies\Services\Contracts\MovieProvider;
|
|
use App\Modules\Movies\Services\Omdb\OmdbMovieProvider;
|
|
use App\Modules\Movies\Services\Tmdb\TmdbMovieProvider;
|
|
use App\Modules\Movies\Services\Contracts\ListMoviesServiceInterface;
|
|
use App\Modules\Movies\Services\Contracts\ShowMovieServiceInterface;
|
|
use App\Modules\Movies\Services\Contracts\UpsertMovieServiceInterface;
|
|
use App\Modules\Movies\Services\Contracts\CheckMovieExistsServiceInterface;
|
|
use App\Modules\Movies\Services\Contracts\{GetActorWithMoviesServiceInterface, GetDirectorWithMoviesServiceInterface, GetStudioWithMoviesServiceInterface, GetGenreWithMoviesServiceInterface};
|
|
use App\Modules\Movies\Services\Contracts\{UpdateMovieServiceInterface, DeleteMovieServiceInterface};
|
|
use App\Modules\Movies\Services\Browse\ListMoviesService;
|
|
use App\Modules\Movies\Services\Browse\ShowMovieService;
|
|
use App\Modules\Movies\Services\UpsertMovieFromProvider;
|
|
use App\Modules\Movies\Services\CheckMovieExistsService;
|
|
use App\Modules\Movies\Services\Browse\Entities\{GetActorWithMoviesService, GetDirectorWithMoviesService, GetStudioWithMoviesService, GetGenreWithMoviesService};
|
|
use App\Modules\Movies\Services\{UpdateMovieService, DeleteMovieService};
|
|
|
|
class MoviesServiceProvider extends ServiceProvider
|
|
{
|
|
public function register(): void
|
|
{
|
|
// Bind movie provider based on config
|
|
$this->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');
|
|
});
|
|
}
|
|
}
|