import uuid from datetime import datetime from sqlalchemy import DateTime, ForeignKey, String, Text, text from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.orm import Mapped, mapped_column, relationship from hub_core.models.base import Base, new_uuid class AgentMessage(Base): __tablename__ = "agent_messages" id: Mapped[uuid.UUID] = mapped_column( UUID(as_uuid=True), primary_key=True, default=new_uuid ) from_agent: Mapped[str] = mapped_column(String(100), nullable=False) to_agent: Mapped[str] = mapped_column(String(100), nullable=False, index=True) subject: Mapped[str] = mapped_column(String(500), nullable=False) body: Mapped[str] = mapped_column(Text, nullable=False) thread_id: Mapped[uuid.UUID | None] = mapped_column( UUID(as_uuid=True), ForeignKey("agent_messages.id", ondelete="SET NULL"), nullable=True, index=True, ) read_at: Mapped[datetime | None] = mapped_column( DateTime(timezone=True), nullable=True ) archived_at: Mapped[datetime | None] = mapped_column( DateTime(timezone=True), nullable=True ) created_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), server_default=text("now()"), nullable=False, ) thread_root: Mapped["AgentMessage | None"] = relationship( "AgentMessage", remote_side="AgentMessage.id", foreign_keys=[thread_id], lazy="select", )