""" MongoDB Models using Beanie ODM """ from datetime import datetime from typing import Optional, List, Dict, Any from beanie import Document, Indexed from pydantic import Field class Ticket(Document): """Ticket document for MongoDB""" ticket_id: Indexed(str, unique=True) # External ticket ID title: str description: str priority: str = "medium" # low, medium, high, critical category: Optional[str] = None # network, server, storage, etc. requester: Optional[str] = None # Status and resolution status: str = "processing" # processing, resolved, failed resolution: Optional[str] = None suggested_actions: Optional[List[str]] = None related_docs: Optional[List[Dict[str, str]]] = None # Metrics confidence_score: Optional[float] = None processing_time: Optional[float] = None # Metadata metadata: Dict[str, Any] = Field(default_factory=dict) # Timestamps created_at: datetime = Field(default_factory=datetime.now) updated_at: datetime = Field(default_factory=datetime.now) class Settings: name = "tickets" indexes = [ "ticket_id", "status", "category", "created_at", [("status", 1), ("created_at", -1)], # Compound index ] class DocumentationSection(Document): """Documentation section metadata""" section_id: Indexed(str, unique=True) name: str description: Optional[str] = None # Generation info last_generated: Optional[datetime] = None generation_status: str = "pending" # pending, processing, completed, failed generation_time: Optional[float] = None # Content metadata file_path: Optional[str] = None file_size: Optional[int] = None checksum: Optional[str] = None # Statistics total_chunks: Optional[int] = None total_tokens: Optional[int] = None # Timestamps created_at: datetime = Field(default_factory=datetime.now) updated_at: datetime = Field(default_factory=datetime.now) class Settings: name = "documentation_sections" class ChatSession(Document): """Chat session for tracking conversations""" session_id: Indexed(str, unique=True) user_id: Optional[str] = None # Messages messages: List[Dict[str, Any]] = Field(default_factory=list) # Session metadata started_at: datetime = Field(default_factory=datetime.now) last_activity: datetime = Field(default_factory=datetime.now) total_messages: int = 0 # Context context: Dict[str, Any] = Field(default_factory=dict) class Settings: name = "chat_sessions" indexes = [ "session_id", "user_id", "last_activity", ] class SystemMetric(Document): """System metrics and statistics""" metric_type: str # tickets, api_calls, generation, chat metric_name: str value: float # Dimensions dimensions: Dict[str, str] = Field(default_factory=dict) # Timestamp timestamp: datetime = Field(default_factory=datetime.now) class Settings: name = "system_metrics" indexes = [ "metric_type", "metric_name", "timestamp", [("metric_type", 1), ("timestamp", -1)], ] class AuditLog(Document): """Audit log for tracking system actions""" action: str actor: Optional[str] = None resource_type: str resource_id: str # Details details: Dict[str, Any] = Field(default_factory=dict) # Result success: bool = True error_message: Optional[str] = None # Timestamp timestamp: datetime = Field(default_factory=datetime.now) class Settings: name = "audit_logs" indexes = [ "action", "resource_type", "timestamp", [("resource_type", 1), ("timestamp", -1)], ]