Feste Fächer-Liste je Objekttyp (Vorlagen-Positionen: Dropdown + Sonstiges)
CI / backend-tests (push) Successful in 1m0s
CI / frontend-build (push) Successful in 5m56s

Nutzer-Vorgabe: Rucksack-Fächer sollen aus einer festen, je Objekttyp
gepflegten Liste gewählt werden können statt jedes Mal Freitext einzutippen.
Neue Tabelle fach (Migration 0004), CRUD-Endpoints /faecher, Admin-Tab
Struktur bekommt Fach-Verwaltung, Vorlagen-Editor nutzt Dropdown mit
"Sonstiges"-Freitext-Fallback.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L85hmKbvX7Cqkq47KnQhFt
This commit is contained in:
2026-09-04 10:24:15 +02:00
co-authored by Claude Sonnet 5
parent 2f11011ed1
commit a2877f5672
11 changed files with 493 additions and 17 deletions
+36
View File
@@ -0,0 +1,36 @@
"""fach-Tabelle: feste Fächer-Liste je Objekttyp
Revision ID: 0004_add_fach
Revises: 0003_add_benutzer_email
Create Date: 2026-09-04
Nutzer-Vorgabe: feste Fächer-Liste pro Objekttyp statt Freitext bei jeder
Vorlagenposition. Additive Schema-Erweiterung, bestehende Vorlagenpositionen
(freies Fach-Textfeld) bleiben unverändert nutzbar (Prompt-Vorgabe "optional
sonstiges für freies Textfeld").
"""
from typing import Sequence, Union
from alembic import op
revision: str = "0004_add_fach"
down_revision: Union[str, None] = "0003_add_benutzer_email"
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None
def upgrade() -> None:
op.execute(
"""
CREATE TABLE fach (
id SERIAL PRIMARY KEY,
objekttyp_id INTEGER NOT NULL REFERENCES objekttyp(id),
name TEXT NOT NULL,
sortierung INTEGER NOT NULL DEFAULT 0
);
"""
)
def downgrade() -> None:
op.execute("DROP TABLE fach;")