import uuid from datetime import datetime from sqlalchemy import Column, String, Text, DateTime, ForeignKey, Enum from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.orm import relationship from app.database import Base from app.models.enums import TeamSide class Evidence(Base): """ Evidence model for storing file metadata associated with tests. Files are stored in MinIO, and this model tracks the file location, integrity hash, and upload metadata. The ``team`` field distinguishes whether this evidence was uploaded by Red Team (attack evidence) or Blue Team (detection evidence). """ __tablename__ = "evidences" id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) test_id = Column(UUID(as_uuid=True), ForeignKey("tests.id"), nullable=False) file_name = Column(String, nullable=False) file_path = Column(String, nullable=False) # Path in MinIO sha256_hash = Column(String, nullable=False) uploaded_by = Column(UUID(as_uuid=True), ForeignKey("users.id"), nullable=True) uploaded_at = Column(DateTime, default=datetime.utcnow) team = Column(Enum(TeamSide, name="teamside"), nullable=False, default=TeamSide.red) notes = Column(Text, nullable=True) # Relationships test = relationship("Test", back_populates="evidences") uploader = relationship("User", foreign_keys=[uploaded_by])