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": "Привет мир"}}]}
)