mirror of
https://gitlab.com/foxixus/neomovies-api.git
synced 2025-10-28 01:48:51 +05:00
feat: Update player API to use id_type in path
All Russian players now use format: /players/{player}/{id_type}/{id}
- id_type can be kp (Kinopoisk) or imdb
- Alloha, Lumex, Vibix, HDVB support both ID types
- Added validation for id_type parameter
- Updated handlers to parse id_type from path
This commit is contained in:
@@ -7,28 +7,54 @@ import (
|
||||
)
|
||||
|
||||
type MovieService struct {
|
||||
tmdb *TMDBService
|
||||
tmdb *TMDBService
|
||||
kpService *KinopoiskService
|
||||
}
|
||||
|
||||
func NewMovieService(db *mongo.Database, tmdb *TMDBService) *MovieService {
|
||||
func NewMovieService(db *mongo.Database, tmdb *TMDBService, kpService *KinopoiskService) *MovieService {
|
||||
return &MovieService{
|
||||
tmdb: tmdb,
|
||||
tmdb: tmdb,
|
||||
kpService: kpService,
|
||||
}
|
||||
}
|
||||
|
||||
func (s *MovieService) Search(query string, page int, language, region string, year int) (*models.TMDBResponse, error) {
|
||||
if ShouldUseKinopoisk(language) && s.kpService != nil {
|
||||
kpSearch, err := s.kpService.SearchFilms(query, page)
|
||||
if err == nil {
|
||||
return MapKPSearchToTMDBResponse(kpSearch), nil
|
||||
}
|
||||
}
|
||||
return s.tmdb.SearchMovies(query, page, language, region, year)
|
||||
}
|
||||
|
||||
func (s *MovieService) GetByID(id int, language string) (*models.Movie, error) {
|
||||
if ShouldUseKinopoisk(language) && s.kpService != nil {
|
||||
kpFilm, err := s.kpService.GetFilmByKinopoiskId(id)
|
||||
if err == nil {
|
||||
return MapKPFilmToTMDBMovie(kpFilm), nil
|
||||
}
|
||||
}
|
||||
return s.tmdb.GetMovie(id, language)
|
||||
}
|
||||
|
||||
func (s *MovieService) GetPopular(page int, language, region string) (*models.TMDBResponse, error) {
|
||||
if ShouldUseKinopoisk(language) && s.kpService != nil {
|
||||
kpTop, err := s.kpService.GetTopFilms("TOP_100_POPULAR_FILMS", page)
|
||||
if err == nil {
|
||||
return MapKPSearchToTMDBResponse(kpTop), nil
|
||||
}
|
||||
}
|
||||
return s.tmdb.GetPopularMovies(page, language, region)
|
||||
}
|
||||
|
||||
func (s *MovieService) GetTopRated(page int, language, region string) (*models.TMDBResponse, error) {
|
||||
if ShouldUseKinopoisk(language) && s.kpService != nil {
|
||||
kpTop, err := s.kpService.GetTopFilms("TOP_250_BEST_FILMS", page)
|
||||
if err == nil {
|
||||
return MapKPSearchToTMDBResponse(kpTop), nil
|
||||
}
|
||||
}
|
||||
return s.tmdb.GetTopRatedMovies(page, language, region)
|
||||
}
|
||||
|
||||
@@ -49,5 +75,17 @@ func (s *MovieService) GetSimilar(id, page int, language string) (*models.TMDBRe
|
||||
}
|
||||
|
||||
func (s *MovieService) GetExternalIDs(id int) (*models.ExternalIDs, error) {
|
||||
return s.tmdb.GetMovieExternalIDs(id)
|
||||
tmdbIDs, err := s.tmdb.GetMovieExternalIDs(id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if s.kpService != nil && tmdbIDs.IMDbID != "" {
|
||||
kpFilm, err := s.kpService.GetFilmByImdbId(tmdbIDs.IMDbID)
|
||||
if err == nil && kpFilm != nil {
|
||||
tmdbIDs.KinopoiskID = kpFilm.KinopoiskId
|
||||
}
|
||||
}
|
||||
|
||||
return tmdbIDs, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user