""" Service Management model classes for the service management system. Updated to match the Entity Relation Diagram structure. """ from pydantic import BaseModel, Field from typing import List, Dict, Any, Optional from datetime import datetime import uuid # Import for label registration from modules.shared.attributeUtils import register_model_labels, ModelMixin # CORE MODELS class FileItem(BaseModel, ModelMixin): """Data model for a file item""" id: str = Field(default_factory=lambda: str(uuid.uuid4()), description="Primary key") mandateId: str = Field(description="ID of the mandate this file belongs to") filename: str = Field(description="Name of the file") mimeType: str = Field(description="MIME type of the file") workflowId: Optional[str] = Field(None, description="Foreign key to workflow") fileHash: str = Field(description="Hash of the file") fileSize: int = Field(description="Size of the file in bytes") # Register labels for FileItem register_model_labels( "FileItem", {"en": "File Item", "fr": "Élément de fichier"}, { "id": {"en": "ID", "fr": "ID"}, "mandateId": {"en": "Mandate ID", "fr": "ID du mandat"}, "filename": {"en": "Filename", "fr": "Nom de fichier"}, "mimeType": {"en": "MIME Type", "fr": "Type MIME"}, "workflowId": {"en": "Workflow ID", "fr": "ID du flux de travail"}, "fileHash": {"en": "File Hash", "fr": "Hash du fichier"}, "fileSize": {"en": "File Size", "fr": "Taille du fichier"} } ) class FileData(BaseModel, ModelMixin): """Data model for file data""" id: str = Field(default_factory=lambda: str(uuid.uuid4()), description="Primary key") data: str = Field(description="File data content") base64Encoded: bool = Field(description="Whether the data is base64 encoded") # Register labels for FileData register_model_labels( "FileData", {"en": "File Data", "fr": "Données de fichier"}, { "id": {"en": "ID", "fr": "ID"}, "data": {"en": "Data", "fr": "Données"}, "base64Encoded": {"en": "Base64 Encoded", "fr": "Encodé en Base64"} } ) class Prompt(BaseModel, ModelMixin): """Data model for a prompt""" id: str = Field(default_factory=lambda: str(uuid.uuid4()), description="Primary key") mandateId: str = Field(description="ID of the mandate this prompt belongs to") content: str = Field(description="Content of the prompt") name: str = Field(description="Name of the prompt") # Register labels for Prompt register_model_labels( "Prompt", {"en": "Prompt", "fr": "Invite"}, { "id": {"en": "ID", "fr": "ID"}, "mandateId": {"en": "Mandate ID", "fr": "ID du mandat"}, "content": {"en": "Content", "fr": "Contenu"}, "name": {"en": "Name", "fr": "Nom"} } )