from __future__ import annotations from datetime import datetime from enum import Enum from typing import Optional from sqlmodel import SQLModel, Field class JobStatus(str, Enum): QUEUED = "QUEUED" RUNNING = "RUNNING" COMPLETED = "COMPLETED" FAILED = "FAILED" class Job(SQLModel, table=True): id: Optional[int] = Field(default=None, primary_key=True) profile_name: str client_host: str folders: str ssh_username: str run_id: str status: JobStatus = Field(sa_column_kwargs={"default": JobStatus.QUEUED}) progress: int = 0 summary: Optional[str] = None log_path: Optional[str] = None created_at: datetime = Field(default_factory=datetime.utcnow) updated_at: datetime = Field(default_factory=datetime.utcnow) class Profile(SQLModel, table=True): id: Optional[int] = Field(default=None, primary_key=True) name: str folders: str schedule_enabled: bool = Field(default=False) description: Optional[str] = None created_at: datetime = Field(default_factory=datetime.utcnow) updated_at: datetime = Field(default_factory=datetime.utcnow) class Token(SQLModel, table=True): token: str = Field(primary_key=True) user: str expires_at: datetime class RunHistory(SQLModel, table=True): id: Optional[int] = Field(default=None, primary_key=True) profile_name: str run_id: str created_at: datetime = Field(default_factory=datetime.utcnow)