50 lines
1.2 KiB
Python
50 lines
1.2 KiB
Python
"""
|
|
Analysis model for storing video analysis results.
|
|
"""
|
|
from pydantic import BaseModel, Field
|
|
from typing import Dict, Any, Optional
|
|
from datetime import datetime
|
|
|
|
|
|
class AnalysisCreate(BaseModel):
|
|
"""Create a new analysis record"""
|
|
job_id: str
|
|
user_id: str
|
|
data: Dict[str, Any] # The unified JSON from Gemini
|
|
|
|
|
|
class AnalysisInDB(BaseModel):
|
|
"""Analysis document in MongoDB"""
|
|
id: str = Field(alias="_id")
|
|
job_id: str
|
|
user_id: str
|
|
data: Dict[str, Any] # Unified JSON analysis data
|
|
created_at: datetime = Field(default_factory=datetime.utcnow)
|
|
expires_at: datetime # For TTL index
|
|
|
|
class Config:
|
|
populate_by_name = True
|
|
|
|
|
|
class AnalysisResponse(BaseModel):
|
|
"""Analysis response for API"""
|
|
id: str = Field(alias="_id")
|
|
job_id: str
|
|
data: Dict[str, Any]
|
|
created_at: datetime
|
|
|
|
class Config:
|
|
populate_by_name = True
|
|
|
|
|
|
class AnalysisSummary(BaseModel):
|
|
"""Summary of analysis for history list"""
|
|
id: str = Field(alias="_id")
|
|
job_id: str
|
|
filename: str
|
|
duration_sec: float
|
|
num_participants: int
|
|
created_at: datetime
|
|
|
|
class Config:
|
|
populate_by_name = True
|