From eb0c51c611b4cecb87dc74829ee3b10cfa684ce9 Mon Sep 17 00:00:00 2001 From: Foxix Date: Sat, 4 Jan 2025 12:54:12 +0000 Subject: [PATCH] Update 4 files - /src/index.js - /src/routes/movies.js - /src/config/tmdb.js - /package.json --- package.json | 4 +--- src/config/tmdb.js | 35 +++++++++++++++++++++++++++-------- src/index.js | 18 +++++++++++++----- src/routes/movies.js | 18 ++++++++++++++++++ 4 files changed, 59 insertions(+), 16 deletions(-) diff --git a/package.json b/package.json index cf165fd..d8b4b09 100644 --- a/package.json +++ b/package.json @@ -6,9 +6,7 @@ "scripts": { "start": "node src/index.js", "dev": "nodemon src/index.js", - "build": "npm install --production", - "vercel-build": "echo hello", - "clean": "rm -rf node_modules" + "vercel-build": "echo hello" }, "dependencies": { "axios": "^1.6.2", diff --git a/src/config/tmdb.js b/src/config/tmdb.js index 7a4cd2e..05a6b14 100644 --- a/src/config/tmdb.js +++ b/src/config/tmdb.js @@ -30,6 +30,7 @@ class TMDBClient { async makeRequest(method, endpoint, params = {}) { try { + console.log('TMDB Request:', { method, endpoint, params }); const response = await this.client({ method, url: endpoint, @@ -39,8 +40,21 @@ class TMDBClient { region: 'RU' } }); + console.log('TMDB Response:', { + endpoint, + status: response.status, + page: response.data.page, + totalPages: response.data.total_pages, + resultsCount: response.data.results?.length + }); return response; } catch (error) { + console.error('TMDB Error:', { + endpoint, + params, + error: error.message, + response: error.response?.data + }); if (error.response) { throw new Error(`TMDB API Error: ${error.response.data.status_message || error.message}`); } @@ -54,9 +68,10 @@ class TMDBClient { } async searchMovies(query, page = 1) { + const pageNum = parseInt(page, 10) || 1; const response = await this.makeRequest('GET', '/search/movie', { query, - page, + page: pageNum, include_adult: false }); @@ -69,7 +84,7 @@ class TMDBClient { backdrop_path: this.getImageURL(movie.backdrop_path, 'original') })); - return response; + return data; } async getMovie(id) { @@ -83,36 +98,40 @@ class TMDBClient { } async getPopularMovies(page = 1) { - const response = await this.makeRequest('GET', '/movie/popular', { page }); + const pageNum = parseInt(page, 10) || 1; + console.log('Getting popular movies for page:', pageNum); + const response = await this.makeRequest('GET', '/movie/popular', { page: pageNum }); const data = response.data; data.results = data.results.map(movie => ({ ...movie, poster_path: this.getImageURL(movie.poster_path, 'w500'), backdrop_path: this.getImageURL(movie.backdrop_path, 'original') })); - return response; + return data; } async getTopRatedMovies(page = 1) { - const response = await this.makeRequest('GET', '/movie/top_rated', { page }); + const pageNum = parseInt(page, 10) || 1; + const response = await this.makeRequest('GET', '/movie/top_rated', { page: pageNum }); const data = response.data; data.results = data.results.map(movie => ({ ...movie, poster_path: this.getImageURL(movie.poster_path, 'w500'), backdrop_path: this.getImageURL(movie.backdrop_path, 'original') })); - return response; + return data; } async getUpcomingMovies(page = 1) { - const response = await this.makeRequest('GET', '/movie/upcoming', { page }); + const pageNum = parseInt(page, 10) || 1; + const response = await this.makeRequest('GET', '/movie/upcoming', { page: pageNum }); const data = response.data; data.results = data.results.map(movie => ({ ...movie, poster_path: this.getImageURL(movie.poster_path, 'w500'), backdrop_path: this.getImageURL(movie.backdrop_path, 'original') })); - return response; + return data; } async getMovieExternalIDs(id) { diff --git a/src/index.js b/src/index.js index 51c4b4d..00a6143 100644 --- a/src/index.js +++ b/src/index.js @@ -112,12 +112,20 @@ app.use(express.static(path.join(__dirname, 'public'))); // TMDB client middleware app.use((req, res, next) => { - const token = process.env.TMDB_ACCESS_TOKEN || 'eyJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJkOWRlZTY5ZjYzNzYzOGU2MjY5OGZhZGY0ZjhhYTNkYyIsInN1YiI6IjY1OTVkNmM5ODY5ZTc1NzJmOTY1MjZiZiIsInNjb3BlcyI6WyJhcGlfcmVhZCJdLCJ2ZXJzaW9uIjoxfQ.Wd_tBYGkAoGPVHq3A5DwV1iLs_eGvH3RRz86ghJTmU8'; - if (!token) { - return res.status(500).json({ error: 'TMDB_ACCESS_TOKEN is not set' }); + try { + const token = process.env.TMDB_ACCESS_TOKEN; + if (!token) { + throw new Error('TMDB_ACCESS_TOKEN is not set'); + } + req.tmdb = new TMDBClient(token); + next(); + } catch (error) { + console.error('TMDB Client Error:', error); + res.status(500).json({ + error: 'Failed to initialize TMDB client', + message: process.env.NODE_ENV === 'development' ? error.message : undefined + }); } - req.tmdb = new TMDBClient(token); - next(); }); // API Documentation routes diff --git a/src/routes/movies.js b/src/routes/movies.js index 4cc1cd8..2b866e3 100644 --- a/src/routes/movies.js +++ b/src/routes/movies.js @@ -2,6 +2,17 @@ const express = require('express'); const router = express.Router(); const { formatDate } = require('../utils/date'); +// Middleware для логирования запросов +router.use((req, res, next) => { + console.log('Movies API Request:', { + method: req.method, + path: req.path, + query: req.query, + params: req.params + }); + next(); +}); + /** * @swagger * /movies/search: @@ -173,10 +184,17 @@ router.get('/:id', async (req, res) => { */ router.get('/popular', async (req, res) => { try { + console.log('Popular movies request:', { query: req.query }); const { page = 1 } = req.query; const movies = await req.tmdb.getPopularMovies(page); + console.log('Popular movies response:', { + page: movies.page, + totalPages: movies.total_pages, + resultsCount: movies.results.length + }); res.json(movies); } catch (error) { + console.error('Popular movies error:', error); res.status(500).json({ error: error.message }); } });