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
37 lines
1018 B
Python
37 lines
1018 B
Python
"""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;")
|