from __future__ import annotations from typing import Optional, List from datetime import datetime from uuid import UUID, uuid4 from sqlmodel import SQLModel, Field, Relationship class Task(SQLModel, table=True): __tablename__ = "tasks" id: UUID = Field( default_factory=uuid4, primary_key=True, index=True, ) taskSource: str = Field(alias="task_source") jobStarted: Optional[datetime] = Field( default=None, alias="job_started" ) jobCompleted: Optional[datetime] = Field( default=None, alias="job_completed" ) status: str = Field(default="In Progress") service: Optional[str] = None updatedAt: datetime = Field( default_factory=datetime.utcnow, alias="updated_at", ) # Relationship subTasks: List["SubTask"] = Relationship(back_populates="task") class SubTask(SQLModel, table=True): __tablename__ = "sub_task" id: UUID = Field( default_factory=uuid4, primary_key=True, index=True, ) taskId: UUID = Field( foreign_key="tasks.id", alias="task_id", ) jobStarted: Optional[datetime] = Field( default=None, alias="job_started" ) jobCompleted: Optional[datetime] = Field( default=None, alias="job_completed" ) status: str = Field(default="In Progress") inputs: Optional[str] = None outputs: Optional[str] = None cloudLogsURL: Optional[str] = Field(alias="cloud_logs_url") updatedAt: datetime = Field( default_factory=datetime.utcnow, alias="updated_at", ) # Relationship task: Optional[Task] = Relationship(back_populates="subTasks")