From d6944442d0e1bf74b7a8b4d5b55390278be26fa3 Mon Sep 17 00:00:00 2001 From: Nikita Yakovlev Date: Mon, 9 Feb 2026 14:43:12 +0300 Subject: [PATCH 1/3] add new field --- ...b2ef_add_published_field_to_movie_table.py | 33 +++++++++++++++++++ backend/backlog_app/models/movie.py | 7 +++- backend/backlog_app/schemas/movie.py | 2 ++ 3 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 backend/backlog_app/alembic/versions/2026_02_09_1441-b470381bb2ef_add_published_field_to_movie_table.py diff --git a/backend/backlog_app/alembic/versions/2026_02_09_1441-b470381bb2ef_add_published_field_to_movie_table.py b/backend/backlog_app/alembic/versions/2026_02_09_1441-b470381bb2ef_add_published_field_to_movie_table.py new file mode 100644 index 0000000..045022a --- /dev/null +++ b/backend/backlog_app/alembic/versions/2026_02_09_1441-b470381bb2ef_add_published_field_to_movie_table.py @@ -0,0 +1,33 @@ +"""add published field to Movie table + +Revision ID: b470381bb2ef +Revises: 38f457e3cf5f +Create Date: 2026-02-09 14:41:50.069806 + +""" + +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa + +# revision identifiers, used by Alembic. +revision: str = "b470381bb2ef" +down_revision: Union[str, Sequence[str], None] = "38f457e3cf5f" +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + """Upgrade schema.""" + op.add_column( + "movies", + sa.Column( + "published", sa.Boolean(), server_default="false", nullable=False + ), + ) + + +def downgrade() -> None: + """Downgrade schema.""" + op.drop_column("movies", "published") diff --git a/backend/backlog_app/models/movie.py b/backend/backlog_app/models/movie.py index a872340..6cce5b5 100644 --- a/backend/backlog_app/models/movie.py +++ b/backend/backlog_app/models/movie.py @@ -39,7 +39,12 @@ class Movie(Base): server_default="false", nullable=False, ) - + published: Mapped[bool] = mapped_column( + Boolean, + default=False, + server_default="false", + nullable=False, + ) rating: Mapped[float | None] = mapped_column( Float, nullable=True, diff --git a/backend/backlog_app/schemas/movie.py b/backend/backlog_app/schemas/movie.py index 22f8674..d02e2d9 100644 --- a/backend/backlog_app/schemas/movie.py +++ b/backend/backlog_app/schemas/movie.py @@ -19,6 +19,7 @@ class MovieCreate(MovieBase): description: Annotated[str, Len(min_length=20, max_length=1000)] | None = None year: int | None = None rating: float | None = Field(default=None, ge=1.0, le=10.0) + published: bool = False class MovieUpdate(MovieBase): @@ -27,6 +28,7 @@ class MovieUpdate(MovieBase): year: int | None = None watched: bool | None = None rating: float | None = Field(default=None, ge=1.0, le=10.0) + published: bool = False class MovieRead(MovieBase): From 39deb9721fc31a3b91193ffb2205c6c82f99a274 Mon Sep 17 00:00:00 2001 From: Nikita Yakovlev Date: Mon, 9 Feb 2026 14:55:50 +0300 Subject: [PATCH 2/3] edit get movies list --- backend/backlog_app/api/crud.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/backend/backlog_app/api/crud.py b/backend/backlog_app/api/crud.py index 8097dd7..c2bd79a 100644 --- a/backend/backlog_app/api/crud.py +++ b/backend/backlog_app/api/crud.py @@ -1,6 +1,7 @@ import logging from fastapi import HTTPException +from sqlalchemy import or_ from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.future import select from sqlalchemy.orm import selectinload @@ -40,11 +41,19 @@ async def create_movie( async def get_movies(db: AsyncSession, user_id: str | None = None): query = select(Movie).options(selectinload(Movie.user)) - if user_id is not None: - query = query.where(Movie.user_id == user_id) + if user_id: + query = query.where( + or_( + Movie.user_id == user_id, + Movie.published.is_(False) + ) + ) + else: + query = query.where(Movie.published.is_(True)) result = await db.execute(query) movies = result.scalars().all() + return [ MovieRead( id=m.id, From 9cb7f35ceb03743897479c2fb2ef259241cb3d3f Mon Sep 17 00:00:00 2001 From: Nikita Yakovlev Date: Tue, 10 Feb 2026 13:07:34 +0300 Subject: [PATCH 3/3] logic change: if the flag is specified, user entries are displayed, if not specified, then only those entries that are published. --- ...1441-b470381bb2ef_add_published_field_to_movie_table.py | 6 ++---- backend/backlog_app/api/crud.py | 7 +------ 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/backend/backlog_app/alembic/versions/2026_02_09_1441-b470381bb2ef_add_published_field_to_movie_table.py b/backend/backlog_app/alembic/versions/2026_02_09_1441-b470381bb2ef_add_published_field_to_movie_table.py index 045022a..a8ffbde 100644 --- a/backend/backlog_app/alembic/versions/2026_02_09_1441-b470381bb2ef_add_published_field_to_movie_table.py +++ b/backend/backlog_app/alembic/versions/2026_02_09_1441-b470381bb2ef_add_published_field_to_movie_table.py @@ -8,8 +8,8 @@ from typing import Sequence, Union -from alembic import op import sqlalchemy as sa +from alembic import op # revision identifiers, used by Alembic. revision: str = "b470381bb2ef" @@ -22,9 +22,7 @@ def upgrade() -> None: """Upgrade schema.""" op.add_column( "movies", - sa.Column( - "published", sa.Boolean(), server_default="false", nullable=False - ), + sa.Column("published", sa.Boolean(), server_default="false", nullable=False), ) diff --git a/backend/backlog_app/api/crud.py b/backend/backlog_app/api/crud.py index d704972..3e5c776 100644 --- a/backend/backlog_app/api/crud.py +++ b/backend/backlog_app/api/crud.py @@ -42,12 +42,7 @@ async def get_movies(db: AsyncSession, user_id: str | None = None): query = select(Movie).options(selectinload(Movie.user)) if user_id: - query = query.where( - or_( - Movie.user_id == user_id, - Movie.published.is_(False) - ) - ) + query = query.where(Movie.user_id == user_id) else: query = query.where(Movie.published.is_(True))