from sqlalchemy.orm import Mapped, mapped_column, relationship from sqlalchemy import String, Integer, Float, ForeignKey, DateTime, Enum as SAEnum from datetime import datetime import enum from backend.models.base import Base, TimestampMixin class AuditStatut(str, enum.Enum): planifie = "planifie" en_cours = "en_cours" termine = "termine" annule = "annule" class Audit(Base, TimestampMixin): __tablename__ = "audits" id: Mapped[int] = mapped_column(primary_key=True, index=True) client_id: Mapped[int] = mapped_column(ForeignKey("clients.id"), nullable=False, index=True) nom: Mapped[str] = mapped_column(String(255), nullable=False) statut: Mapped[AuditStatut] = mapped_column(SAEnum(AuditStatut), default=AuditStatut.planifie, nullable=False) date_debut: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True) date_fin: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True) score_global: Mapped[float | None] = mapped_column(Float, nullable=True) client: Mapped["Client"] = relationship("Client", back_populates="audits") cibles: Mapped[list["Cible"]] = relationship("Cible", back_populates="audit", cascade="all, delete-orphan") vulnerabilites: Mapped[list["Vulnerabilite"]] = relationship( "Vulnerabilite", back_populates="audit", cascade="all, delete-orphan" )