From 17c9aaebdcfcfb46c528edd2eca33ef2807a0e24 Mon Sep 17 00:00:00 2001 From: Nikita Yakovlev Date: Mon, 23 Mar 2026 22:54:12 +0300 Subject: [PATCH 1/5] fix response --- backend/backlog_app/servicies/ai_agent/client.py | 2 +- backend/backlog_app/tasks/movie_task.py | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) 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( From ceae11cd1058a368fd5023b9c0f087d0b8d28228 Mon Sep 17 00:00:00 2001 From: Nikita Yakovlev Date: Mon, 23 Mar 2026 23:02:04 +0300 Subject: [PATCH 2/5] description of the automatic filling message --- frontend/src/components/ui/AddMovieModal.vue | 6 ++++++ 1 file changed, 6 insertions(+) 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 }}

+

+ + + + Если не заполнить и указан год — описание добавится автоматически +

Date: Mon, 23 Mar 2026 23:02:25 +0300 Subject: [PATCH 3/5] add rating badge --- frontend/src/api/movies.ts | 2 ++ frontend/src/components/ui/MovieCard.vue | 25 ++++++++++++++- frontend/src/views/movies/MovieDetailView.vue | 32 ++++++++++++++++++- 3 files changed, 57 insertions(+), 2 deletions(-) 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/MovieCard.vue b/frontend/src/components/ui/MovieCard.vue index 4910939..b689920 100644 --- a/frontend/src/components/ui/MovieCard.vue +++ b/frontend/src/components/ui/MovieCard.vue @@ -46,7 +46,7 @@

-
+
{{ movie.rating }}/10
+ + +
+ IMDb {{ movie.imdbRating }} + Metascore {{ movie.metacriticScore }} +
@@ -175,6 +192,12 @@ function handleToggleWatched() { emit('toggle-watched', props.movie) } +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', diff --git a/frontend/src/views/movies/MovieDetailView.vue b/frontend/src/views/movies/MovieDetailView.vue index 639aa27..7a28bcb 100644 --- a/frontend/src/views/movies/MovieDetailView.vue +++ b/frontend/src/views/movies/MovieDetailView.vue @@ -50,7 +50,7 @@ -
+
{{ movie.rating }} / 10
+ +
+ + IMDb + {{ movie.imdbRating }} + /10 + + + Metascore + {{ movie.metacriticScore }} + +
+

{{ 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' }) } From f5ba2ca3b74cf56b74490ca6cf52e969ee2765c7 Mon Sep 17 00:00:00 2001 From: Nikita Yakovlev Date: Mon, 23 Mar 2026 23:08:01 +0300 Subject: [PATCH 4/5] save toggle state --- frontend/src/views/movies/MovieListView.vue | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) 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 @@

- +
@@ -133,7 +133,8 @@ const showAddModal = ref(false) const editingMovie = ref(null) const deletingMovie = ref(null) const activeFilter = ref<'all' | 'watched' | 'pending'>('all') -const onlyMine = ref(false) +const ONLY_MINE_KEY = 'movies:onlyMine' +const onlyMine = ref(sessionStorage.getItem(ONLY_MINE_KEY) === 'true') const watchedCount = computed(() => store.movies.filter((m) => m.watched).length) const pendingCount = computed(() => store.movies.filter((m) => !m.watched).length) @@ -158,6 +159,11 @@ async function loadMovies() { await store.fetchMovies(onlyMine.value) } +function toggleOnlyMine(value: boolean) { + sessionStorage.setItem(ONLY_MINE_KEY, String(value)) + loadMovies() +} + onMounted(loadMovies) function closeModal() { From 35233f87d939b8e44691f3189f5945ace0f3121d Mon Sep 17 00:00:00 2001 From: Nikita Yakovlev Date: Mon, 23 Mar 2026 23:13:01 +0300 Subject: [PATCH 5/5] fix test --- backend/tests/test_servicies/test_ai_agent/test_client.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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": "Привет мир"}}]} )