From 0b69067d7c0f5efc30beaf198f486f6e557d0270 Mon Sep 17 00:00:00 2001 From: moneyfy Date: Wed, 9 Sep 2026 13:13:17 +0200 Subject: [PATCH] fix: native Enum-Typen im Alembic-Downgrade entfernen Ohne diesen Schritt scheitert ein erneutes `alembic upgrade head` nach einem Downgrade daran, dass die Typen noch existieren. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_014e7t8UpmoVNMtWivY5LiSH --- CHANGELOG.md | 4 +++- .../versions/20260909_1307_initial_schema.py | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ffecf65..d0cf37e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,7 +15,9 @@ die Versionierung folgt [Semantic Versioning](https://semver.org/lang/de/). - Vollständiges Datenmodell als SQLAlchemy-2.0-Modelle: Konten, Kategorien, Firmen, Logo-Assets, Recurrences, Preishistorie, Occurrences, Buchungen, Budgets samt Vorlagen, Sparziele, Rücklagen, Benachrichtigungsregeln und -protokoll, Benutzer. -- Alembic-Setup gegen die Async-Engine samt Erstmigration des kompletten Schemas. +- Alembic-Setup gegen die Async-Engine samt Erstmigration des kompletten Schemas; + der Downgrade entfernt auch die nativen Enum-Typen, sodass Auf- und Abwärtsmigration + beliebig oft wiederholbar sind. - Idempotenter Seed für den deutschen Standard-Kategoriebaum (35 Kategorien) und die Standard-Benachrichtigungsregeln. - Endpunkte `GET /api/health` und `GET /api/version`. diff --git a/backend/alembic/versions/20260909_1307_initial_schema.py b/backend/alembic/versions/20260909_1307_initial_schema.py index d0604ed..e4df263 100644 --- a/backend/alembic/versions/20260909_1307_initial_schema.py +++ b/backend/alembic/versions/20260909_1307_initial_schema.py @@ -16,6 +16,20 @@ branch_labels: str | Sequence[str] | None = None depends_on: str | Sequence[str] | None = None +# Alle nativen PostgreSQL-Enum-Typen dieses Schemas. +ENUM_TYPES = ( + "account_type", + "business_day_shift", + "entry_kind", + "logo_source", + "logo_status", + "notification_channel", + "notification_status", + "notification_type", + "occurrence_status", +) + + def upgrade() -> None: # ### commands auto generated by Alembic - please adjust! ### op.create_table('account', @@ -288,3 +302,8 @@ def downgrade() -> None: op.drop_index('ix_account_is_active', table_name='account') op.drop_table('account') # ### end Alembic commands ### + + # Alembic entfernt die nativen Enum-Typen nicht automatisch – ohne diesen Schritt + # scheitert ein erneutes `upgrade head` an bereits vorhandenen Typen. + for enum_name in ENUM_TYPES: + sa.Enum(name=enum_name).drop(op.get_bind(), checkfirst=True)