import uuid from sqlalchemy import CheckConstraint, ForeignKey, String from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.orm import Mapped, mapped_column from app.db.base import Base class Zustaendigkeit(Base): """Karte 04 / Sprintplan E2: Standort-Zuordnung vererbt sich auf alle Objekte am Standort, Objekt-Zeile ist feinere Ergänzung (Vereinigung, kein Ersatz). Siehe app/services/zustaendigkeit.py für die Auswertelogik.""" __tablename__ = "zustaendigkeit" __table_args__ = ( CheckConstraint( "standort_id IS NOT NULL OR objekt_id IS NOT NULL", name="zustaendigkeit_standort_oder_objekt", ), ) id: Mapped[uuid.UUID] = mapped_column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) benutzer_id: Mapped[int] = mapped_column(ForeignKey("benutzer.id"), nullable=False) standort_id: Mapped[int | None] = mapped_column(ForeignKey("standort.id")) objekt_id: Mapped[int | None] = mapped_column(ForeignKey("objekt.id")) class Kontrollverantwortung(Base): """Karte 01 / Sprintplan E3: reine Sichtbarkeit/Priorisierung, keine Pflichtkontrolle.""" __tablename__ = "kontrollverantwortung" id: Mapped[uuid.UUID] = mapped_column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) objekt_id: Mapped[int] = mapped_column(ForeignKey("objekt.id"), nullable=False) benutzer_id: Mapped[int | None] = mapped_column(ForeignKey("benutzer.id")) gruppe: Mapped[str | None] = mapped_column(String)