diff --git a/backend/backlog_app/servicies/ai_agent/client.py b/backend/backlog_app/servicies/ai_agent/client.py index 0108e26..51cc65a 100644 --- a/backend/backlog_app/servicies/ai_agent/client.py +++ b/backend/backlog_app/servicies/ai_agent/client.py @@ -33,5 +33,5 @@ async def translate(self, text: str) -> str: ) response.raise_for_status() - data = await response.json() + data = response.json() return data["choices"][0]["message"]["content"] diff --git a/backend/backlog_app/tasks/movie_task.py b/backend/backlog_app/tasks/movie_task.py index 54c2ddc..2303d95 100644 --- a/backend/backlog_app/tasks/movie_task.py +++ b/backend/backlog_app/tasks/movie_task.py @@ -29,7 +29,7 @@ async def update_movie_rating(movie: MovieRead, db: AsyncSession, user: User): movie_db.title, movie_db.year ) except Exception as e: - logger.error("Failed to fetch rating for movie <%s>: %s", movie.id, e) + logger.exception("Failed to fetch rating for movie <%s>: %s", movie.id, e) return await partial_update_movie( @@ -67,13 +67,15 @@ async def update_movie_description( movie_db.title, movie_db.year ) except Exception as e: - logger.error("Failed to fetch description for movie <%s>: %s", movie.id, e) + logger.exception("Failed to fetch description for movie <%s>: %s", movie.id, e) return try: ru_description = await translator.translate(en_description) except Exception as e: - logger.error("Failed to translate description for movie <%s>: %s", movie.id, e) + logger.exception( + "Failed to translate description for movie <%s>: %s", movie.id, e + ) return await partial_update_movie( diff --git a/backend/tests/test_servicies/test_ai_agent/test_client.py b/backend/tests/test_servicies/test_ai_agent/test_client.py index fc26c75..f3e7126 100644 --- a/backend/tests/test_servicies/test_ai_agent/test_client.py +++ b/backend/tests/test_servicies/test_ai_agent/test_client.py @@ -10,8 +10,8 @@ async def test_translate_success(): client = AIClient(model="gpt-test") mock_response = AsyncMock() - mock_response.raise_for_status = AsyncMock() - mock_response.json = AsyncMock( + mock_response.raise_for_status = Mock() + mock_response.json = Mock( return_value={"choices": [{"message": {"content": "Привет мир"}}]} ) diff --git a/frontend/src/api/movies.ts b/frontend/src/api/movies.ts index 61c8742..c4bc82e 100644 --- a/frontend/src/api/movies.ts +++ b/frontend/src/api/movies.ts @@ -25,6 +25,8 @@ export interface MovieRead { watchLink: string | null kpId: number | null imdbId: number | null + imdbRating: number | null + metacriticScore: number | null published: boolean user: UserRead watched: boolean diff --git a/frontend/src/components/ui/AddMovieModal.vue b/frontend/src/components/ui/AddMovieModal.vue index 0019aae..b479999 100644 --- a/frontend/src/components/ui/AddMovieModal.vue +++ b/frontend/src/components/ui/AddMovieModal.vue @@ -58,6 +58,12 @@ :class="{ 'error': errors.description }" />
{{ errors.description }}
++ + Если не заполнить и указан год — описание добавится автоматически +
{{ movie.description }} @@ -253,6 +277,12 @@ async function handleDelete() { } } +function metacriticBadgeStyle(score: number) { + const bg = score >= 61 ? '#dcfce7' : score >= 40 ? '#fef9c3' : '#fee2e2' + const color = score >= 61 ? '#166534' : score >= 40 ? '#854d0e' : '#991b1b' + return `background: ${bg}; color: ${color};` +} + function formatDate(iso: string) { return new Date(iso).toLocaleDateString('ru-RU', { day: 'numeric', month: 'long', year: 'numeric' }) } diff --git a/frontend/src/views/movies/MovieListView.vue b/frontend/src/views/movies/MovieListView.vue index a1e10e8..bdb3fa0 100644 --- a/frontend/src/views/movies/MovieListView.vue +++ b/frontend/src/views/movies/MovieListView.vue @@ -37,7 +37,7 @@