diff --git a/pkg/services/movie.go b/pkg/services/movie.go index dac625d..ced4c94 100644 --- a/pkg/services/movie.go +++ b/pkg/services/movie.go @@ -1,6 +1,7 @@ package services import ( + "fmt" "go.mongodb.org/mongo-driver/mongo" "neomovies-api/pkg/models" @@ -41,11 +42,28 @@ func (s *MovieService) GetByID(id int, language string, idType string) (*models. } if useKP && s.kpService != nil { + // Сначала пробуем напрямую по KP ID kpFilm, err := s.kpService.GetFilmByKinopoiskId(id) if err == nil { return MapKPFilmToTMDBMovie(kpFilm), nil } + + // Если не найдено и явно указан id_type=kp, возможно это TMDB ID + // Пробуем конвертировать TMDB -> KP + if idType == "kp" { + kpId, convErr := TmdbIdToKPId(s.tmdb, s.kpService, id) + if convErr == nil { + kpFilm, err := s.kpService.GetFilmByKinopoiskId(kpId) + if err == nil { + return MapKPFilmToTMDBMovie(kpFilm), nil + } + } + // Если конвертация не удалась, возвращаем ошибку вместо fallback + return nil, fmt.Errorf("film not found in Kinopoisk with id %d", id) + } } + + // Для TMDB или если KP не указан return s.tmdb.GetMovie(id, language) } diff --git a/pkg/services/tv.go b/pkg/services/tv.go index 21e39b6..3ac3bbe 100644 --- a/pkg/services/tv.go +++ b/pkg/services/tv.go @@ -1,6 +1,7 @@ package services import ( + "fmt" "go.mongodb.org/mongo-driver/mongo" "neomovies-api/pkg/models" @@ -37,11 +38,28 @@ func (s *TVService) GetByID(id int, language string, idType string) (*models.TVS } if useKP && s.kpService != nil { + // Сначала пробуем напрямую по KP ID kpFilm, err := s.kpService.GetFilmByKinopoiskId(id) if err == nil && kpFilm != nil { return MapKPFilmToTVShow(kpFilm), nil } + + // Если не найдено и явно указан id_type=kp, возможно это TMDB ID + // Пробуем конвертировать TMDB -> KP + if idType == "kp" { + kpId, convErr := TmdbIdToKPId(s.tmdb, s.kpService, id) + if convErr == nil { + kpFilm, err := s.kpService.GetFilmByKinopoiskId(kpId) + if err == nil && kpFilm != nil { + return MapKPFilmToTVShow(kpFilm), nil + } + } + // Если конвертация не удалась, возвращаем ошибку вместо fallback + return nil, fmt.Errorf("TV show not found in Kinopoisk with id %d", id) + } } + + // Для TMDB или если KP не указан return s.tmdb.GetTVShow(id, language) }