"""遗留任务记录表模型"""
import datetime
from typing import Optional
import sqlalchemy as sa
from sqlalchemy import func
from sqlalchemy.orm import Mapped, mapped_column
from backend.core.database import Base
LEFT_OVER_TASK_STATUS_VALUES = ("open", "closed")
class LeftoverTask(Base):
"""遗留任务记录表
记录通过 PR 评论创建的遗留任务,与 GitCode Issue 一一对应。
"""
__tablename__ = "leftover_tasks"
id: Mapped[int] = mapped_column(sa.Integer, primary_key=True, autoincrement=True)
pr_id: Mapped[int] = mapped_column(sa.Integer, nullable=False)
issue_id: Mapped[str] = mapped_column(sa.String(32), nullable=False)
issue_url: Mapped[str] = mapped_column(sa.String(512), nullable=False)
description: Mapped[str] = mapped_column(sa.Text, nullable=False)
status: Mapped[str] = mapped_column(sa.String(16), default="open", nullable=False)
created_by: Mapped[str] = mapped_column(sa.String(128), nullable=False)
assignee: Mapped[str] = mapped_column(sa.String(128), nullable=True)
created_at: Mapped[datetime.datetime] = mapped_column(
sa.DateTime, nullable=False, server_default=func.now(),
)
updated_at: Mapped[datetime.datetime] = mapped_column(
sa.DateTime, nullable=False, server_default=func.now(), onupdate=func.now(),
)
__table_args__ = (
sa.Index("idx_lt_pr_id", "pr_id"),
sa.Index("idx_lt_status", "status"),
)
def __repr__(self) -> str:
return (
f"<LeftoverTask(id={self.id}, pr_id={self.pr_id}, "
f"issue_id={self.issue_id}, status={self.status})>"
)