import uuid from datetime import datetime from typing import Literal from pydantic import BaseModel, ConfigDict, model_validator from app.models.mangel import MangelPrioritaet, MangelStatus EntitaetTyp = Literal["objektposition", "geraet_instanz"] class MangelCreate(BaseModel): objekt_id: int entitaet_typ: EntitaetTyp | None = None entitaet_id: str | None = None beschreibung: str prioritaet: MangelPrioritaet = MangelPrioritaet.normal @model_validator(mode="after") def _entitaet_beide_oder_keins(self) -> "MangelCreate": if (self.entitaet_typ is None) != (self.entitaet_id is None): raise ValueError("entitaet_typ und entitaet_id müssen beide gesetzt oder beide leer sein") return self class MangelRead(BaseModel): model_config = ConfigDict(from_attributes=True) id: uuid.UUID objekt_id: int entitaet_typ: str | None entitaet_id: str | None beschreibung: str prioritaet: MangelPrioritaet status: MangelStatus gemeldet_von: int gemeldet_am: datetime erledigt_von: int | None erledigt_am: datetime | None class MangelStatusUpdate(BaseModel): status: MangelStatus