76 lines
2.8 KiB
Python
76 lines
2.8 KiB
Python
"""
|
|
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"}
|
|
}
|
|
)
|
|
|