from datetime import datetime, timezone from typing import TYPE_CHECKING from sqlalchemy import DateTime, Integer, String from sqlalchemy.orm import Mapped, mapped_column, relationship from db.base import Base if TYPE_CHECKING: from db.models.message import Message def _utcnow() -> datetime: return datetime.now(timezone.utc) class Thread(Base): __tablename__ = "threads" id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) name: Mapped[str] = mapped_column(String(200), nullable=False) # Зарезервировано под Спринты 3+: мульти-пользователи и мульти-промпты. user_id: Mapped[int | None] = mapped_column(Integer, nullable=True, index=True) agent_config_id: Mapped[int | None] = mapped_column(Integer, nullable=True, index=True) created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), default=_utcnow, nullable=False) updated_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), default=_utcnow, onupdate=_utcnow, nullable=False ) messages: Mapped[list["Message"]] = relationship( back_populates="thread", cascade="all, delete-orphan", order_by="Message.created_at", )