from __future__ import annotations from core.db.base import Base, TimestampMixin from sqlalchemy import BigInteger, DateTime, Integer, String, Text, func from sqlalchemy.orm import Mapped, mapped_column class DivinationRecord(TimestampMixin, Base): __tablename__ = "user_divination_records" id: Mapped[int] = mapped_column(BigInteger, primary_key=True, autoincrement=True) user_id: Mapped[int] = mapped_column(BigInteger, nullable=False) trace_id: Mapped[str] = mapped_column(String(64), nullable=False) question: Mapped[str] = mapped_column(Text, nullable=False) question_type: Mapped[str] = mapped_column(String(50), nullable=False) divination_data: Mapped[str] = mapped_column(Text, nullable=False) deepseek_request: Mapped[str] = mapped_column(Text, nullable=False) deepseek_response: Mapped[str | None] = mapped_column(Text, nullable=True) interpretation_result: Mapped[str | None] = mapped_column(Text, nullable=True) api_success: Mapped[bool] = mapped_column(Integer, nullable=False, default=0) error_message: Mapped[str | None] = mapped_column(Text, nullable=True) api_duration_ms: Mapped[int | None] = mapped_column(BigInteger, nullable=True) phone_number: Mapped[str | None] = mapped_column(String(20), nullable=True) class DivinationHistory(TimestampMixin, Base): __tablename__ = "user_divination_history" id: Mapped[int] = mapped_column(BigInteger, primary_key=True, autoincrement=True) user_id: Mapped[int] = mapped_column(BigInteger, nullable=False) phone_number: Mapped[str] = mapped_column(String(20), nullable=False) local_record_id: Mapped[int | None] = mapped_column(BigInteger, nullable=True) json_data: Mapped[str] = mapped_column(Text, nullable=False) ai_result: Mapped[str] = mapped_column(Text, nullable=False) question_type: Mapped[str] = mapped_column(String(50), nullable=False) question: Mapped[str] = mapped_column(Text, nullable=False) timestamp: Mapped[int] = mapped_column(BigInteger, nullable=False) is_active: Mapped[bool] = mapped_column(Integer, nullable=False, default=1) sync_time: Mapped[str] = mapped_column( DateTime, nullable=False, server_default=func.now() )