models.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. """SQLAlchemy 模型:字段名对齐当前数据库实际列名。"""
  2. from datetime import datetime
  3. from sqlalchemy import BigInteger, DateTime, Integer, SmallInteger, String
  4. from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
  5. from config.settings import TABLE_PREFIX
  6. class Base(DeclarativeBase):
  7. pass
  8. def _now() -> datetime:
  9. return datetime.now()
  10. class Video(Base):
  11. __tablename__ = f"{TABLE_PREFIX}videos"
  12. id: Mapped[int] = mapped_column(BigInteger, primary_key=True, autoincrement=True)
  13. video_id: Mapped[str] = mapped_column(String(255), unique=True, nullable=False)
  14. keyword: Mapped[str | None] = mapped_column(String(255))
  15. title: Mapped[str | None] = mapped_column(String(255))
  16. author_nickname: Mapped[str | None] = mapped_column(String(128))
  17. author_douyin_id: Mapped[str | None] = mapped_column(String(255))
  18. author_link: Mapped[str | None] = mapped_column(String(512))
  19. video_url: Mapped[str | None] = mapped_column(String(512))
  20. summary: Mapped[str | None] = mapped_column(String(512))
  21. create_at: Mapped[datetime | None] = mapped_column(DateTime, default=_now)
  22. update_at: Mapped[datetime | None] = mapped_column(DateTime, default=_now, onupdate=_now)
  23. class Lead(Base):
  24. __tablename__ = f"{TABLE_PREFIX}leads"
  25. id: Mapped[int] = mapped_column(BigInteger, primary_key=True, autoincrement=True)
  26. douyin_id: Mapped[str] = mapped_column(String(255), unique=True, nullable=False)
  27. nick_name: Mapped[str | None] = mapped_column(String(255))
  28. user_link: Mapped[str | None] = mapped_column(String(512))
  29. status: Mapped[int | None] = mapped_column(SmallInteger, default=1)
  30. ai_score: Mapped[int | None] = mapped_column(Integer)
  31. ai_reason: Mapped[str | None] = mapped_column(String(255))
  32. score_create: Mapped[datetime | None] = mapped_column(DateTime)
  33. create_at: Mapped[datetime | None] = mapped_column(DateTime, default=_now)
  34. update_at: Mapped[datetime | None] = mapped_column(DateTime, default=_now, onupdate=_now)
  35. class Comment(Base):
  36. __tablename__ = f"{TABLE_PREFIX}comments"
  37. id: Mapped[int] = mapped_column(BigInteger, primary_key=True, autoincrement=True)
  38. # 关联 videos.id(表主键),不是平台 video_id 字符串
  39. video_id: Mapped[int] = mapped_column(BigInteger, nullable=False, index=True)
  40. lead_id: Mapped[int | None] = mapped_column(BigInteger, index=True)
  41. douyin_id: Mapped[str | None] = mapped_column(String(255), index=True)
  42. nick_name: Mapped[str | None] = mapped_column(String(255))
  43. content: Mapped[str | None] = mapped_column(String(1024))
  44. comment_time: Mapped[str | None] = mapped_column(String(64))
  45. # 1=一级评论,0=回复
  46. type: Mapped[int | None] = mapped_column(SmallInteger, default=1)
  47. create_at: Mapped[datetime | None] = mapped_column(DateTime, default=_now)
  48. class Conversation(Base):
  49. __tablename__ = f"{TABLE_PREFIX}conversations"
  50. id: Mapped[int] = mapped_column(BigInteger, primary_key=True, autoincrement=True)
  51. lead_id: Mapped[int] = mapped_column(BigInteger, unique=True, nullable=False)
  52. douyin_id: Mapped[str] = mapped_column(String(255), nullable=False, index=True)
  53. nickname: Mapped[str | None] = mapped_column(String(128))
  54. last_message_time: Mapped[datetime | None] = mapped_column(DateTime)
  55. create_at: Mapped[datetime | None] = mapped_column(DateTime, default=_now)
  56. update_at: Mapped[datetime | None] = mapped_column(DateTime, default=_now, onupdate=_now)
  57. class Message(Base):
  58. __tablename__ = f"{TABLE_PREFIX}messages"
  59. id: Mapped[int] = mapped_column(BigInteger, primary_key=True, autoincrement=True)
  60. conversation_id: Mapped[int] = mapped_column(BigInteger, nullable=False, index=True)
  61. lead_id: Mapped[int | None] = mapped_column(BigInteger, index=True)
  62. douyin_id: Mapped[str | None] = mapped_column(String(255))
  63. direction: Mapped[str | None] = mapped_column(String(16))
  64. content: Mapped[str | None] = mapped_column(String(1024))
  65. create_at: Mapped[datetime | None] = mapped_column(DateTime, default=_now)