mirror of
https://gitlab.com/foxixus/neomovies-api.git
synced 2025-10-27 17:38:51 +05:00
fix: Remove TMDB fallback and add ID conversion for strict id_type handling
ПРОБЛЕМА: - При id_type='kp' код делал fallback на TMDB если фильм не найден - Если передан TMDB ID с id_type='kp', возвращались данные из TMDB - Нарушалась явная логика выбора источника РЕШЕНИЕ: 1. Убран автоматический fallback на TMDB при id_type='kp' 2. Добавлена конвертация ID: - Если id_type='kp' и фильм не найден напрямую - Пробуем конвертировать TMDB ID → KP ID через TmdbIdToKPId - Запрашиваем данные по сконвертированному KP ID 3. Если конвертация не удалась → возвращаем ошибку ЛОГИКА: - id_type='kp' + ID=550 (TMDB): 1. Поиск KP фильма с id=550 → не найдено 2. Конвертация 550 (TMDB) → получаем KP ID (например 326) 3. Поиск KP фильма с id=326 → успех 4. Возврат данных из Kinopoisk ✅ - id_type='kp' + несуществующий ID: 1. Поиск KP фильма → не найдено 2. Конвертация → не удалась 3. Возврат ошибки (НЕ fallback на TMDB) ✅ ИЗМЕНЕНИЯ: - pkg/services/movie.go: добавлена конвертация и удален fallback - pkg/services/tv.go: добавлена конвертация и удален fallback - Добавлен import fmt для форматирования ошибок РЕЗУЛЬТАТ: ✅ Строгое соблюдение id_type параметра ✅ Умная конвертация между TMDB и KP ID ✅ Нет неожиданного fallback на другой источник
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user