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 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014e7t8UpmoVNMtWivY5LiSH
This commit is contained in:
moneyfy
2026-09-09 13:13:17 +02:00
co-authored by Claude Opus 5
parent 0b06775be3
commit 0b69067d7c
2 changed files with 22 additions and 1 deletions
+3 -1
View File
@@ -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`.
@@ -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)