feat(dokumente): DOC-002 feste Dokumenttypen statt Freitext
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:
@@ -1,13 +1,30 @@
|
||||
import enum
|
||||
import uuid
|
||||
from datetime import datetime
|
||||
|
||||
from sqlalchemy import ForeignKey, Integer, String
|
||||
from sqlalchemy.dialects.postgresql import TIMESTAMP, UUID
|
||||
from sqlalchemy.dialects.postgresql import ENUM as PgEnum, TIMESTAMP, UUID
|
||||
from sqlalchemy.orm import Mapped, mapped_column
|
||||
|
||||
from app.db.base import Base
|
||||
|
||||
|
||||
class DokumentTyp(str, enum.Enum):
|
||||
"""DOC-002: feste Kategorie statt Freitext - macht Dokumente filter-/
|
||||
wiederfindbar (Nutzer-Vorgabe Modul 10: Prüfprotokolle/Wartungsberichte/
|
||||
Bedienungsanleitungen/Rechnungen/Zulassungsdokumente)."""
|
||||
|
||||
pruefprotokoll = "pruefprotokoll"
|
||||
wartungsbericht = "wartungsbericht"
|
||||
bedienungsanleitung = "bedienungsanleitung"
|
||||
rechnung = "rechnung"
|
||||
zulassungsdokument = "zulassungsdokument"
|
||||
sonstiges = "sonstiges"
|
||||
|
||||
|
||||
dokument_typ_pg = PgEnum(DokumentTyp, name="dokument_typ", create_type=False)
|
||||
|
||||
|
||||
class Dokument(Base):
|
||||
"""Roadmap Phase 5 (Modul Dokumente): polymorpher Datei-Anhang an beliebige
|
||||
Ressource (Objekt, Objektposition, Geräteinstanz, Mangel, Fahrzeugdetails,
|
||||
@@ -30,6 +47,9 @@ class Dokument(Base):
|
||||
# Nullable wegen Altbestand vor dieser Migration (Hash nachträglich ohne
|
||||
# Dateizugriff nicht sinnvoll befüllbar); jeder neue Upload setzt ihn.
|
||||
dateihash: Mapped[str | None] = mapped_column(String(64))
|
||||
dokumenttyp: Mapped[DokumentTyp] = mapped_column(
|
||||
dokument_typ_pg, nullable=False, default=DokumentTyp.sonstiges
|
||||
)
|
||||
beschreibung: Mapped[str | None] = mapped_column(String)
|
||||
hochgeladen_von: Mapped[int] = mapped_column(ForeignKey("benutzer.id"), nullable=False)
|
||||
hochgeladen_am: Mapped[datetime] = mapped_column(TIMESTAMP(timezone=True), nullable=False)
|
||||
|
||||
Reference in New Issue
Block a user