File size: 1,326 Bytes
6a3de9e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
from sqlmodel import SQLModel, Field
from typing import Optional, Dict, Any
from datetime import datetime
from uuid import UUID, uuid4
from enum import Enum
from sqlalchemy.types import JSON


class TaskOperationTypeEnum(str, Enum):
    add_task = "add_task"
    list_tasks = "list_tasks"
    complete_task = "complete_task"
    delete_task = "delete_task"
    update_task = "update_task"


class TaskOperationBase(SQLModel):
    conversation_id: UUID = Field(nullable=False, foreign_key="conversation.id")
    operation_type: TaskOperationTypeEnum = Field(nullable=False)
    operation_params: Dict[str, Any] = Field(sa_type=JSON)
    result: Optional[Dict[str, Any]] = Field(default=None, sa_type=JSON)


class TaskOperation(TaskOperationBase, table=True):
    """
    Represents an action performed on tasks (add, list, complete, update, delete) triggered by AI interpretation.
    """
    id: Optional[UUID] = Field(default_factory=uuid4, primary_key=True)
    timestamp: datetime = Field(default_factory=datetime.utcnow)


class TaskOperationCreate(TaskOperationBase):
    """Schema for creating a new task operation."""
    conversation_id: UUID
    operation_type: TaskOperationTypeEnum


class TaskOperationRead(TaskOperationBase):
    """Schema for reading task operation data."""
    id: UUID
    timestamp: datetime