"""飞书回执 Outbox 模型。""" from __future__ import annotations from datetime import datetime from typing import Optional from sqlalchemy import Integer, TIMESTAMP, TEXT, VARCHAR from sqlalchemy.orm import Mapped, mapped_column from .base import Base class FeishuReplyOutbox(Base): __tablename__ = "feishu_reply_outbox" id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) trace_id: Mapped[Optional[str]] = mapped_column(VARCHAR(64), nullable=True, index=True) source_message_id: Mapped[Optional[str]] = mapped_column(VARCHAR(128), nullable=True, index=True) sent_message_id: Mapped[Optional[str]] = mapped_column(VARCHAR(128), nullable=True, index=True) chat_id: Mapped[str] = mapped_column(VARCHAR(128), nullable=False, index=True) message_text: Mapped[str] = mapped_column(TEXT, nullable=False) reply_hash: Mapped[Optional[str]] = mapped_column(VARCHAR(32), nullable=True, index=True) status: Mapped[str] = mapped_column(VARCHAR(20), nullable=False, default="pending", index=True) attempts: Mapped[int] = mapped_column(Integer, nullable=False, default=0) next_retry_at: Mapped[Optional[datetime]] = mapped_column(TIMESTAMP, nullable=True, index=True) sent_at: Mapped[Optional[datetime]] = mapped_column(TIMESTAMP, nullable=True) last_error: Mapped[Optional[str]] = mapped_column(TEXT, nullable=True)