From abebdb019b35c30ea3ec67dbb132c7ca3ad70456 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Trkan?= Date: Thu, 9 Oct 2025 15:15:24 +0200 Subject: [PATCH] feat(models): change unique index --- ...4-390041bd839e_update_categories_unique.py | 34 +++++++++++++++++++ 7project/backend/app/models/categories.py | 7 ++-- 2 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 7project/backend/alembic/versions/2025_10_09_1514-390041bd839e_update_categories_unique.py diff --git a/7project/backend/alembic/versions/2025_10_09_1514-390041bd839e_update_categories_unique.py b/7project/backend/alembic/versions/2025_10_09_1514-390041bd839e_update_categories_unique.py new file mode 100644 index 0000000..ffcc861 --- /dev/null +++ b/7project/backend/alembic/versions/2025_10_09_1514-390041bd839e_update_categories_unique.py @@ -0,0 +1,34 @@ +"""update categories unique + +Revision ID: 390041bd839e +Revises: 63e072f09836 +Create Date: 2025-10-09 15:14:31.557686 + +""" +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision: str = '390041bd839e' +down_revision: Union[str, Sequence[str], None] = '63e072f09836' +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + """Upgrade schema.""" + # ### commands auto generated by Alembic - please adjust! ### + op.drop_index(op.f('name'), table_name='categories') + op.create_unique_constraint('uix_name_user_id', 'categories', ['name', 'user_id']) + # ### end Alembic commands ### + + +def downgrade() -> None: + """Downgrade schema.""" + # ### commands auto generated by Alembic - please adjust! ### + op.drop_constraint('uix_name_user_id', 'categories', type_='unique') + op.create_index(op.f('name'), 'categories', ['name'], unique=True) + # ### end Alembic commands ### diff --git a/7project/backend/app/models/categories.py b/7project/backend/app/models/categories.py index 8ae0e5c..bd766a3 100644 --- a/7project/backend/app/models/categories.py +++ b/7project/backend/app/models/categories.py @@ -1,5 +1,5 @@ from fastapi_users_db_sqlalchemy import GUID -from sqlalchemy import Column, Integer, String, ForeignKey, Table +from sqlalchemy import Column, Integer, String, ForeignKey, Table, UniqueConstraint from sqlalchemy.orm import relationship from app.core.base import Base @@ -14,8 +14,11 @@ association_table = Table( class Category(Base): __tablename__ = "categories" + __table_args__ = ( + UniqueConstraint("name", "user_id", name="uix_name_user_id"), + ) id = Column(Integer, primary_key=True, autoincrement=True) - name = Column(String(length=100), unique=True, nullable=False) + name = Column(String(length=100), nullable=False) description = Column(String(length=255), nullable=True) user_id = Column(GUID, ForeignKey("user.id"), nullable=False) user = relationship("User", back_populates="categories")