"""MongoDB document models.""" from datetime import datetime from typing import Optional from pydantic import BaseModel, Field from backend.core.schema import EnsembleResult, DetectionResult, Verdict class AnalysisHistoryDocument(BaseModel): """Document for storing analysis history in MongoDB.""" id: Optional[str] = Field(default=None, alias="_id") filename: str verdict: Verdict p_fake: float confidence: float primary_evidence: str supporting_evidence: list[str] uncertainty_factors: list[str] detector_results: list[DetectionResult] processing_time_ms: float fusion_details: dict created_at: datetime = Field(default_factory=datetime.utcnow) class Config: # Allow both id and _id populate_by_name = True @classmethod def from_ensemble_result( cls, filename: str, result: EnsembleResult, ) -> "AnalysisHistoryDocument": """Create from EnsembleResult.""" return cls( filename=filename, verdict=result.verdict, p_fake=result.p_fake, confidence=result.confidence, primary_evidence=result.primary_evidence, supporting_evidence=result.supporting_evidence, uncertainty_factors=result.uncertainty_factors, detector_results=result.detector_results, processing_time_ms=result.processing_time_ms, fusion_details=result.fusion_details, ) class AnalysisHistoryResponse(BaseModel): """Response model for history queries.""" id: str = Field(alias="_id") filename: str verdict: Verdict p_fake: float confidence: float processing_time_ms: float created_at: datetime class Config: populate_by_name = True