From 912697b046909309dea9bf870bd9ca4422dd27f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Trkan?= Date: Thu, 30 Oct 2025 13:49:29 +0100 Subject: [PATCH] fix(relations): allow deleting transaction when relation exists --- ...30_1342-59cebf320c4a_cascade_categories.py | 46 +++++++++++++++++++ 7project/backend/app/models/categories.py | 4 +- 7project/backend/app/models/transaction.py | 2 +- 3 files changed, 49 insertions(+), 3 deletions(-) create mode 100644 7project/backend/alembic/versions/2025_10_30_1342-59cebf320c4a_cascade_categories.py diff --git a/7project/backend/alembic/versions/2025_10_30_1342-59cebf320c4a_cascade_categories.py b/7project/backend/alembic/versions/2025_10_30_1342-59cebf320c4a_cascade_categories.py new file mode 100644 index 0000000..75506d9 --- /dev/null +++ b/7project/backend/alembic/versions/2025_10_30_1342-59cebf320c4a_cascade_categories.py @@ -0,0 +1,46 @@ +"""Cascade categories + +Revision ID: 59cebf320c4a +Revises: 46b9e702e83f +Create Date: 2025-10-30 13:42:44.555284 + +""" +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa +from sqlalchemy.dialects import mysql + +# revision identifiers, used by Alembic. +revision: str = '59cebf320c4a' +down_revision: Union[str, Sequence[str], None] = '46b9e702e83f' +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.add_column('category_transaction', sa.Column('category_id', sa.Integer(), nullable=False)) + op.add_column('category_transaction', sa.Column('transaction_id', sa.Integer(), nullable=False)) + op.drop_constraint(op.f('category_transaction_ibfk_2'), 'category_transaction', type_='foreignkey') + op.drop_constraint(op.f('category_transaction_ibfk_1'), 'category_transaction', type_='foreignkey') + op.create_foreign_key(None, 'category_transaction', 'transaction', ['transaction_id'], ['id'], ondelete='CASCADE') + op.create_foreign_key(None, 'category_transaction', 'categories', ['category_id'], ['id'], ondelete='CASCADE') + op.drop_column('category_transaction', 'id_category') + op.drop_column('category_transaction', 'id_transaction') + # ### end Alembic commands ### + + +def downgrade() -> None: + """Downgrade schema.""" + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('category_transaction', sa.Column('id_transaction', mysql.INTEGER(display_width=11), autoincrement=False, nullable=True)) + op.add_column('category_transaction', sa.Column('id_category', mysql.INTEGER(display_width=11), autoincrement=False, nullable=True)) + op.drop_constraint(None, 'category_transaction', type_='foreignkey') + op.drop_constraint(None, 'category_transaction', type_='foreignkey') + op.create_foreign_key(op.f('category_transaction_ibfk_1'), 'category_transaction', 'categories', ['id_category'], ['id']) + op.create_foreign_key(op.f('category_transaction_ibfk_2'), 'category_transaction', 'transaction', ['id_transaction'], ['id']) + op.drop_column('category_transaction', 'transaction_id') + op.drop_column('category_transaction', 'category_id') + # ### end Alembic commands ### diff --git a/7project/backend/app/models/categories.py b/7project/backend/app/models/categories.py index bd766a3..90675c8 100644 --- a/7project/backend/app/models/categories.py +++ b/7project/backend/app/models/categories.py @@ -7,8 +7,8 @@ from app.core.base import Base association_table = Table( "category_transaction", Base.metadata, - Column("id_category", Integer, ForeignKey("categories.id")), - Column("id_transaction", Integer, ForeignKey("transaction.id")) + Column("category_id", Integer, ForeignKey("categories.id", ondelete="CASCADE"), primary_key=True), + Column("transaction_id", Integer, ForeignKey("transaction.id", ondelete="CASCADE"), primary_key=True) ) diff --git a/7project/backend/app/models/transaction.py b/7project/backend/app/models/transaction.py index d432437..0622952 100644 --- a/7project/backend/app/models/transaction.py +++ b/7project/backend/app/models/transaction.py @@ -21,4 +21,4 @@ class Transaction(Base): # Relationship user = relationship("User", back_populates="transactions") - categories = relationship("Category", secondary=association_table, back_populates="transactions") + categories = relationship("Category", secondary=association_table, back_populates="transactions", passive_deletes=True)