from datetime import datetime from sqlalchemy import DateTime, String, func from sqlalchemy.orm import Mapped, mapped_column from app.database import Base class WecomBindToken(Base): """A single-use, expiring binding token issued after a verified WeCom callback.""" __tablename__ = "wecom_bind_tokens" token: Mapped[str] = mapped_column(String(64), primary_key=True) wecom_userid: Mapped[str] = mapped_column(String(100), index=True) expires_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), index=True) consumed_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True) created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now())