from sqlalchemy.orm import Mapped, mapped_column, relationship from sqlalchemy import String, Text, Float, ForeignKey, Enum as SAEnum import enum from backend.models.base import Base, TimestampMixin class Criticite(str, enum.Enum): critique = "critique" # CVSS 9-10 important = "important" # CVSS 7-8.9 modere = "modere" # CVSS 4-6.9 faible = "faible" # CVSS 0-3.9 class Vulnerabilite(Base, TimestampMixin): __tablename__ = "vulnerabilites" id: Mapped[int] = mapped_column(primary_key=True, index=True) audit_id: Mapped[int] = mapped_column(ForeignKey("audits.id"), nullable=False, index=True) criticite: Mapped[Criticite] = mapped_column(SAEnum(Criticite), nullable=False) titre: Mapped[str] = mapped_column(String(500), nullable=False) description: Mapped[str] = mapped_column(Text, nullable=False) recommandation: Mapped[str] = mapped_column(Text, nullable=False) cve: Mapped[str | None] = mapped_column(String(50), nullable=True) cvss_score: Mapped[float | None] = mapped_column(Float, nullable=True) cible: Mapped[str | None] = mapped_column(String(255), nullable=True) audit: Mapped["Audit"] = relationship("Audit", back_populates="vulnerabilites") actions: Mapped[list["Action"]] = relationship("Action", back_populates="vulnerabilite", cascade="all, delete-orphan")