2026-08-04 10:05:59 +08:00
|
|
|
|
"""任务操作日志模型"""
|
|
|
|
|
|
import uuid
|
2026-08-05 14:00:23 +08:00
|
|
|
|
from datetime import datetime
|
2026-08-04 10:05:59 +08:00
|
|
|
|
from sqlalchemy import String, DateTime, ForeignKey, Text
|
|
|
|
|
|
from sqlalchemy.dialects.postgresql import UUID
|
|
|
|
|
|
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
|
|
|
|
|
|
|
|
|
|
|
from app.models.base import Base
|
2026-08-05 14:00:23 +08:00
|
|
|
|
from app.core.time_utils import get_beijing_time
|
2026-08-04 10:05:59 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TaskLog(Base):
|
|
|
|
|
|
__tablename__ = "task_logs"
|
|
|
|
|
|
|
|
|
|
|
|
id: Mapped[uuid.UUID] = mapped_column(
|
|
|
|
|
|
UUID(as_uuid=True), primary_key=True, default=uuid.uuid4,
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
# ---- 物理外键(关联本库 tasks) ----
|
|
|
|
|
|
task_id: Mapped[uuid.UUID] = mapped_column(
|
|
|
|
|
|
UUID(as_uuid=True), ForeignKey("tasks.id"), nullable=False, index=True, comment="所属任务ID",
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
# ---- 逻辑外键(关联老系统用户表,仅存储 ID,无物理约束) ----
|
|
|
|
|
|
operator_id: Mapped[str | None] = mapped_column(
|
|
|
|
|
|
String(64), nullable=True, comment="操作人ID(逻辑外键→老系统)",
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
action_type: Mapped[str] = mapped_column(
|
|
|
|
|
|
String(50), nullable=False, comment="操作类型",
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
remark: Mapped[str | None] = mapped_column(
|
|
|
|
|
|
Text, nullable=True, comment="备注",
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
created_at: Mapped[datetime] = mapped_column(
|
2026-08-05 14:00:23 +08:00
|
|
|
|
DateTime(timezone=True), default=get_beijing_time, comment="创建时间",
|
2026-08-04 10:05:59 +08:00
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
# ---- 关系 ----
|
|
|
|
|
|
task: Mapped["Task"] = relationship("Task", lazy="selectin")
|
|
|
|
|
|
|
|
|
|
|
|
def __repr__(self) -> str:
|
|
|
|
|
|
return f"<TaskLog {self.action_type} @ {self.created_at}>"
|