feat(dokumente): DOC-002 feste Dokumenttypen statt Freitext
CI / backend-tests (push) Successful in 2m14s
CI / frontend-build (push) Successful in 36s

Neues Pflichtfeld dokumenttyp (Enum: Prüfprotokoll/Wartungsbericht/
Bedienungsanleitung/Rechnung/Zulassungsdokument/Sonstiges, Migration 0026)
- macht Dokumente kategorisier- und filterbar statt nur per Freitext-
Beschreibung auffindbar zu sein. Backend: Pflichtfeld beim Upload, optionaler
Query-Filter bei GET /dokumente. Frontend: Auswahl-Dropdown beim Upload,
Typ-Badge + Filter-Dropdown in der Liste (DokumentePanel).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
This commit is contained in:
2026-09-08 10:32:25 +02:00
co-authored by Claude Sonnet 5
parent 0619497a1e
commit 069a1ee7ee
10 changed files with 191 additions and 24 deletions
@@ -0,0 +1,33 @@
"""DOC-002: feste Dokumenttypen statt reinem Freitext (Kategorie beim Upload).
Revision ID: 0026_dokumenttyp
Revises: 0025_material_suchindex
Create Date: 2026-09-08
"""
from typing import Sequence, Union
from alembic import op
revision: str = "0026_dokumenttyp"
down_revision: Union[str, None] = "0025_material_suchindex"
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None
def upgrade() -> None:
op.execute(
"CREATE TYPE dokument_typ AS ENUM "
"('pruefprotokoll', 'wartungsbericht', 'bedienungsanleitung', 'rechnung', "
"'zulassungsdokument', 'sonstiges')"
)
op.execute(
"ALTER TABLE dokument ADD COLUMN dokumenttyp dokument_typ NOT NULL DEFAULT 'sonstiges'"
)
# Default nur für den Backfill nötig - künftige Inserts sollen den Typ immer
# explizit mitgeben (Anwendungsebene), kein stiller Fallback mehr.
op.execute("ALTER TABLE dokument ALTER COLUMN dokumenttyp DROP DEFAULT")
def downgrade() -> None:
op.execute("ALTER TABLE dokument DROP COLUMN dokumenttyp")
op.execute("DROP TYPE dokument_typ")