""" Core data models for CAE Mesh Generator """ from datetime import datetime from dataclasses import dataclass from typing import Optional @dataclass class UploadedFile: """Model for uploaded CAD files""" id: str filename: str file_path: str upload_time: datetime status: str # UPLOADED, PROCESSING, COMPLETED, ERROR def to_dict(self): return { 'id': self.id, 'filename': self.filename, 'file_path': self.file_path, 'upload_time': self.upload_time.isoformat(), 'status': self.status } @dataclass class ProcessingStatus: """Model for tracking processing status""" status: str # IDLE, PROCESSING, COMPLETED, ERROR message: str start_time: Optional[datetime] = None end_time: Optional[datetime] = None error_message: Optional[str] = None progress_percentage: float = 0.0 current_operation: Optional[str] = None last_updated: Optional[datetime] = None completed_at: Optional[datetime] = None def to_dict(self): return { 'status': self.status, 'message': self.message, 'start_time': self.start_time.isoformat() if self.start_time else None, 'end_time': self.end_time.isoformat() if self.end_time else None, 'error_message': self.error_message, 'progress_percentage': self.progress_percentage, 'current_operation': self.current_operation, 'last_updated': self.last_updated.isoformat() if self.last_updated else None, 'completed_at': self.completed_at.isoformat() if self.completed_at else None } @dataclass class MeshResult: """Model for mesh generation results""" element_count: int node_count: int generation_time: float quality_score: float = 0.0 quality_status: str = "UNKNOWN" mesh_file_path: Optional[str] = None created_at: Optional[datetime] = None min_element_quality: float = 0.0 # Backward compatibility processing_time: float = 0.0 # Backward compatibility mesh_image_path: str = "" # Backward compatibility def to_dict(self): return { 'element_count': self.element_count, 'node_count': self.node_count, 'generation_time': self.generation_time, 'quality_score': self.quality_score, 'quality_status': self.quality_status, 'mesh_file_path': self.mesh_file_path, 'created_at': self.created_at.isoformat() if self.created_at else None, # Backward compatibility fields 'min_element_quality': self.min_element_quality, 'processing_time': self.processing_time or self.generation_time, 'mesh_image_path': self.mesh_image_path }