"""Phase 4:Job(异步任务)与 Experiment(实验归档)表。""" from __future__ import annotations from datetime import datetime from sqlalchemy import DateTime, String, Text from sqlalchemy.orm import Mapped, mapped_column from app.infrastructure.persistence.sqlalchemy.base import Base class JobModel(Base): __tablename__ = "job" id: Mapped[str] = mapped_column(String(32), primary_key=True) kind: Mapped[str] = mapped_column(String(16)) status: Mapped[str] = mapped_column(String(12), index=True) stage: Mapped[str | None] = mapped_column(String(24), nullable=True) spec_json: Mapped[str] = mapped_column(Text) error: Mapped[str | None] = mapped_column(Text, nullable=True) result_json: Mapped[str | None] = mapped_column(Text, nullable=True) experiment_id: Mapped[str | None] = mapped_column(String(32), nullable=True) created_at: Mapped[datetime] = mapped_column(DateTime) started_at: Mapped[datetime | None] = mapped_column(DateTime, nullable=True) finished_at: Mapped[datetime | None] = mapped_column(DateTime, nullable=True) class ExperimentModel(Base): __tablename__ = "experiment" id: Mapped[str] = mapped_column(String(32), primary_key=True) kind: Mapped[str] = mapped_column(String(16)) spec_json: Mapped[str] = mapped_column(Text) result_json: Mapped[str] = mapped_column(Text) summary_text: Mapped[str | None] = mapped_column(String(200), nullable=True) code_version: Mapped[str | None] = mapped_column(String(40), nullable=True) data_version: Mapped[str | None] = mapped_column(String(40), nullable=True) job_id: Mapped[str | None] = mapped_column(String(32), nullable=True) created_at: Mapped[datetime] = mapped_column(DateTime)