diff --git a/pkg/handlers/movie.go b/pkg/handlers/movie.go index b299e82..53249b2 100644 --- a/pkg/handlers/movie.go +++ b/pkg/handlers/movie.go @@ -55,8 +55,9 @@ func (h *MovieHandler) GetByID(w http.ResponseWriter, r *http.Request) { } language := GetLanguage(r) + idType := r.URL.Query().Get("id_type") // kp or tmdb - movie, err := h.movieService.GetByID(id, language) + movie, err := h.movieService.GetByID(id, language, idType) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return diff --git a/pkg/handlers/tv.go b/pkg/handlers/tv.go index 4297751..14a4ada 100644 --- a/pkg/handlers/tv.go +++ b/pkg/handlers/tv.go @@ -54,8 +54,9 @@ func (h *TVHandler) GetByID(w http.ResponseWriter, r *http.Request) { } language := GetLanguage(r) + idType := r.URL.Query().Get("id_type") // kp or tmdb - tvShow, err := h.tvService.GetByID(id, language) + tvShow, err := h.tvService.GetByID(id, language, idType) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return diff --git a/pkg/services/movie.go b/pkg/services/movie.go index 891e635..dac625d 100644 --- a/pkg/services/movie.go +++ b/pkg/services/movie.go @@ -28,8 +28,19 @@ func (s *MovieService) Search(query string, page int, language, region string, y 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 { +func (s *MovieService) GetByID(id int, language string, idType string) (*models.Movie, error) { + // Если указан id_type, используем его; иначе определяем по языку + useKP := false + if idType == "kp" { + useKP = true + } else if idType == "tmdb" { + useKP = false + } else { + // Если id_type не указан, используем старую логику по языку + useKP = ShouldUseKinopoisk(language) + } + + if useKP && s.kpService != nil { kpFilm, err := s.kpService.GetFilmByKinopoiskId(id) if err == nil { return MapKPFilmToTMDBMovie(kpFilm), nil diff --git a/pkg/services/tv.go b/pkg/services/tv.go index aa575b4..21e39b6 100644 --- a/pkg/services/tv.go +++ b/pkg/services/tv.go @@ -24,8 +24,19 @@ func (s *TVService) Search(query string, page int, language string, year int) (* return s.tmdb.SearchTVShows(query, page, language, year) } -func (s *TVService) GetByID(id int, language string) (*models.TVShow, error) { - if ShouldUseKinopoisk(language) && s.kpService != nil { +func (s *TVService) GetByID(id int, language string, idType string) (*models.TVShow, error) { + // Если указан id_type, используем его; иначе определяем по языку + useKP := false + if idType == "kp" { + useKP = true + } else if idType == "tmdb" { + useKP = false + } else { + // Если id_type не указан, используем старую логику по языку + useKP = ShouldUseKinopoisk(language) + } + + if useKP && s.kpService != nil { kpFilm, err := s.kpService.GetFilmByKinopoiskId(id) if err == nil && kpFilm != nil { return MapKPFilmToTVShow(kpFilm), nil