From 22be996125abf613cbb6470fc813889ed0a14108 Mon Sep 17 00:00:00 2001 From: Foxix Date: Thu, 16 Jan 2025 15:45:32 +0000 Subject: [PATCH] Update 2 files - /src/api.ts - /src/lib/api.ts --- src/api.ts | 97 ---------------------------- src/lib/api.ts | 168 +++++++++++++++++-------------------------------- 2 files changed, 59 insertions(+), 206 deletions(-) delete mode 100644 src/api.ts diff --git a/src/api.ts b/src/api.ts deleted file mode 100644 index 997c3b2..0000000 --- a/src/api.ts +++ /dev/null @@ -1,97 +0,0 @@ -import axios from 'axios'; - -const BASE_URL = '/api/movies'; - -if (typeof window === 'undefined' && !process.env.NEXT_PUBLIC_TMDB_ACCESS_TOKEN) { - throw new Error('TMDB_ACCESS_TOKEN is not defined in environment variables'); -} - -export const api = axios.create({ - baseURL: BASE_URL, - headers: { - 'Content-Type': 'application/json' - } -}); - -export interface MovieDetails extends Movie { - genres: Genre[]; - runtime: number; - tagline: string; - budget: number; - revenue: number; - videos: {{ - "page": 1, - "results": [ - { - "id": 123, - "title": "Movie Title", - "overview": "Movie description", - "poster_path": "/path/to/poster.jpg", - ... - }, - ... - ], - "total_pages": 500, - "total_results": 10000 - } - results: Video[]; - }; - credits: { - cast: Cast[]; - crew: Crew[]; - }; -} - -export interface Video { - id: string; - key: string; - name: string; - site: string; - type: string; -} - -export interface Cast { - id: number; - name: string; - character: string; - profile_path: string | null; -} - -export interface Crew { - id: number; - name: string; - job: string; - profile_path: string | null; -} - -export const moviesAPI = { - // Получение популярных фильмов - async getPopular(page = 1) { - const response = await api.get(`/popular?page=${page}`); - return response.data; - }, - - // Получение данных о фильме - async getMovie(id: string | number) { - const response = await api.get(`/${id}`); - return response.data; - }, - - // Поиск фильмов - async searchMovies(query: string, page = 1) { - const response = await api.get(`/search?query=${encodeURIComponent(query)}&page=${page}`); - return response.data; - }, - - // Получение предстоящих фильмов - async getUpcoming(page = 1) { - const response = await api.get(`/upcoming?page=${page}`); - return response.data; - }, - - // Получение топ рейтинговых фильмов - async getTopRated(page = 1) { - const response = await api.get(`/top-rated?page=${page}`); - return response.data; - } -}; \ No newline at end of file diff --git a/src/lib/api.ts b/src/lib/api.ts index 8ae72bd..3b5bd92 100644 --- a/src/lib/api.ts +++ b/src/lib/api.ts @@ -1,15 +1,14 @@ import axios from 'axios'; -const BASE_URL = 'https://api.themoviedb.org/3'; +const API_URL = process.env.NEXT_PUBLIC_API_URL; -if (typeof window === 'undefined' && !process.env.NEXT_PUBLIC_TMDB_ACCESS_TOKEN) { - throw new Error('TMDB_ACCESS_TOKEN is not defined in environment variables'); +if (!API_URL) { + throw new Error('NEXT_PUBLIC_API_URL is not defined in environment variables'); } export const api = axios.create({ - baseURL: BASE_URL, + baseURL: API_URL, headers: { - 'Authorization': `Bearer ${process.env.NEXT_PUBLIC_TMDB_ACCESS_TOKEN}`, 'Content-Type': 'application/json' } }); @@ -104,14 +103,14 @@ export interface Crew { profile_path: string | null; } -interface MovieResponse { +export interface MovieResponse { page: number; results: Movie[]; total_pages: number; total_results: number; } -interface TVShowResponse { +export interface TVShowResponse { page: number; results: TVShow[]; total_pages: number; @@ -120,136 +119,87 @@ interface TVShowResponse { export const moviesAPI = { // Получение популярных фильмов - getPopular: (page = 1) => - api.get('/movie/popular', { - params: { - page, - language: 'ru-RU', - } - }), + getPopular(page = 1) { + return api.get('/movies/popular', { + params: { page } + }); + }, // Получение данных о фильме по его TMDB ID - getMovie: (id: string | number) => - api.get(`/movie/${id}`, { - params: { - language: 'ru-RU', - append_to_response: 'credits,videos,similar' - } - }), + getMovie(id: string | number) { + return api.get(`/movies/${id}`); + }, // Получение IMDb ID по TMDB ID для плеера - getImdbId: async (tmdbId: string | number) => { - try { - const response = await api.get(`/movie/${tmdbId}/external_ids`); - return response.data.imdb_id; - } catch (error) { - console.error('Ошибка при получении IMDb ID:', error); - return null; - } + getImdbId(tmdbId: string | number) { + return api.get<{ imdb_id: string }>(`/movies/${tmdbId}/external-ids`); }, // Получение видео по TMDB ID для плеера - getVideo: async (tmdbId: string | number) => { - try { - const response = await api.get(`/movie/${tmdbId}/videos`, { - params: { - language: 'ru-RU', - }, - }); - return response.data.results; - } catch (error) { - console.error('Ошибка при получении видео:', error); - return []; - } + getVideo(tmdbId: string | number) { + return api.get<{ results: Video[] }>(`/movies/${tmdbId}/videos`); }, // Поиск фильмов - searchMovies: (query: string, page = 1) => - api.get('/search/movie', { - params: { - query, - page, - language: 'ru-RU', - } - }), + searchMovies(query: string, page = 1) { + return api.get('/movies/search', { + params: { query, page } + }); + }, // Получение предстоящих фильмов - getUpcoming: (page = 1) => - api.get('/movie/upcoming', { - params: { - page, - language: 'ru-RU', - } - }), + getUpcoming(page = 1) { + return api.get('/movies/upcoming', { + params: { page } + }); + }, // Получение лучших фильмов - getTopRated: (page = 1) => - api.get('/movie/top_rated', { - params: { - page, - language: 'ru-RU', - 'vote_count.gte': 100 - } - }), + getTopRated(page = 1) { + return api.get('/movies/top-rated', { + params: { page } + }); + }, // Получение фильмов по жанру - getMoviesByGenre: (genreId: number, page = 1) => - api.get('/discover/movie', { - params: { - with_genres: genreId, - page, - language: 'ru-RU', - 'vote_count.gte': 100, - 'vote_average.gte': 1, - sort_by: 'popularity.desc', - include_adult: false, - 'primary_release_date.lte': new Date().toISOString().split('T')[0] - } - }), + getMoviesByGenre(genreId: number, page = 1) { + return api.get('/movies/genre/' + genreId, { + params: { page } + }); + } }; export const tvAPI = { // Получение популярных сериалов - getPopular: (page = 1) => - api.get('/tv/popular', { - params: { - page, - language: 'ru-RU', - } - }), + getPopular(page = 1) { + return api.get('/tv/popular', { + params: { page } + }); + }, // Получение данных о сериале по его TMDB ID - getShow: (id: string | number) => - api.get(`/tv/${id}`, { - params: { - language: 'ru-RU', - append_to_response: 'credits,external_ids', - } - }), + getShow(id: string | number) { + return api.get(`/tv/${id}`); + }, // Получение IMDb ID по TMDB ID для плеера - getImdbId: (tmdbId: string | number) => - api.get<{ imdb_id: string | null }>(`/tv/${tmdbId}/external_ids`), + getImdbId(tmdbId: string | number) { + return api.get<{ imdb_id: string }>(`/tv/${tmdbId}/external-ids`); + }, // Поиск сериалов - searchShows: (query: string, page = 1) => - api.get('/search/tv', { - params: { - query, - page, - language: 'ru-RU', - } - }), + searchShows(query: string, page = 1) { + return api.get('/tv/search', { + params: { query, page } + }); + } }; // Мультипоиск (фильмы и сериалы) export const searchAPI = { - multiSearch: (query: string, page = 1) => - api.get('/search/multi', { - params: { - query, - page, - language: 'ru-RU', - } - }), + multiSearch(query: string, page = 1) { + return api.get('/search/multi', { + params: { query, page } + }); + } };