"""Ein Konto kann sagen, dass Ueberweisungen darauf Sparen sind. Bisher entschied das allein der Kontotyp (sparkonto/depot), und auch nur fuer Uebertraege, die als EINE Buchung mit Zielkonto vorliegen. Ein Revolut-Pocket faellt durch beide Raster: Es kommt ueber die Bank als ganz normales Konto herein, und sein Uebertrag besteht aus ZWEI verknuepften Buchungen. Gespart wurde trotzdem – im Budget stand davon nichts. Mit dieser Spalte sagt man es dem Konto einmal, und es gilt fuer beide Formen. Revision ID: 0028 Revises: 0027 """ import sqlalchemy as sa from alembic import op revision = "0028" down_revision = "0027" branch_labels = None depends_on = None def upgrade() -> None: # Der Tabellen-Umbau ist hier sicher: migrations/env.py schaltet die # Fremdschluessel fuer die Dauer der Migration ab, sonst risse das # implizite DELETE beim DROP die Kontomerkmale, Buchungen und # Eingangs-Eintraege mit. Siehe tests/test_migrations.py. with op.batch_alter_table("accounts") as batch: batch.add_column(sa.Column("savings_category_id", sa.Integer(), nullable=True)) batch.create_foreign_key( "fk_accounts_savings_category", "categories", ["savings_category_id"], ["id"], ondelete="SET NULL", ) def downgrade() -> None: with op.batch_alter_table("accounts") as batch: batch.drop_constraint("fk_accounts_savings_category", type_="foreignkey") batch.drop_column("savings_category_id")