from __future__ import annotations from datetime import datetime from sqlalchemy import DateTime, ForeignKey, Index, String, Text from sqlalchemy.orm import Mapped, mapped_column from app.enums.private_portrait import PrivatePortraitValidateSessionStatus from app.models.base import Base, TimestampMixin class PrivatePortraitValidateSession(Base, TimestampMixin): """火山真人认证 H5 会话。""" __tablename__ = "private_portrait_validate_sessions" __table_args__ = ( Index("idx_private_portrait_validate_sessions_user_project", "user_id", "project_id"), Index("idx_private_portrait_validate_sessions_byted_token", "byted_token"), Index("idx_private_portrait_validate_sessions_status_created", "status", "created_at"), ) id: Mapped[str] = mapped_column(String(32), primary_key=True) user_id: Mapped[str] = mapped_column(String(32), ForeignKey("users.id", ondelete="CASCADE"), nullable=False, index=True) project_id: Mapped[str] = mapped_column(String(32), ForeignKey("private_portrait_projects.id", ondelete="CASCADE"), nullable=False, index=True) byted_token: Mapped[str | None] = mapped_column(String(256), nullable=True, index=True) h5_link: Mapped[str | None] = mapped_column(Text, nullable=True) callback_url: Mapped[str | None] = mapped_column(Text, nullable=True) result_code: Mapped[str | None] = mapped_column(String(32), nullable=True, index=True) algorithm_base_resp_code: Mapped[str | None] = mapped_column(String(64), nullable=True) verify_type: Mapped[str | None] = mapped_column(String(32), nullable=True) status: Mapped[str] = mapped_column( String(32), nullable=False, default=PrivatePortraitValidateSessionStatus.CREATED.value, server_default=PrivatePortraitValidateSessionStatus.CREATED.value, index=True, ) remote_group_id: Mapped[str | None] = mapped_column(String(128), nullable=True, index=True) remote_project_name: Mapped[str] = mapped_column(String(256), nullable=False, index=True) expired_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True) error_message: Mapped[str | None] = mapped_column(Text, nullable=True) raw_callback_json: Mapped[str | None] = mapped_column(Text, nullable=True) raw_response_json: Mapped[str | None] = mapped_column(Text, nullable=True)