models.py 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. """
  2. 数据库模型定义
  3. """
  4. from sqlalchemy import Column, Integer, String, Text, DateTime, ForeignKey, Boolean, JSON
  5. from sqlalchemy.ext.declarative import declarative_base
  6. from sqlalchemy.orm import relationship
  7. from datetime import datetime
  8. Base = declarative_base()
  9. class User(Base):
  10. """用户模型"""
  11. __tablename__ = "users"
  12. id = Column(Integer, primary_key=True, index=True)
  13. username = Column(String(50), unique=True, index=True)
  14. email = Column(String(100), unique=True, index=True)
  15. hashed_password = Column(String(100))
  16. created_at = Column(DateTime, default=datetime.utcnow)
  17. updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
  18. # 用户个人资料信息
  19. avatar = Column(String(200), nullable=True)
  20. institution = Column(String(100), default="江西财经大学")
  21. position = Column(String(50), default="学生")
  22. research_fields = Column(JSON, default=list)
  23. # 会员信息
  24. membership_type = Column(String(50), default="高级研究版")
  25. expiry_date = Column(DateTime, nullable=True)
  26. credits = Column(Integer, default=5000)
  27. # 关系
  28. chats = relationship("ChatHistory", back_populates="user")
  29. researches = relationship("ResearchHistory", back_populates="user")
  30. class ChatHistory(Base):
  31. """聊天历史记录"""
  32. __tablename__ = "chat_history"
  33. id = Column(Integer, primary_key=True, index=True)
  34. user_id = Column(Integer, ForeignKey("users.id"))
  35. title = Column(String(200), default="新对话")
  36. created_at = Column(DateTime, default=datetime.utcnow)
  37. updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
  38. # 关系
  39. user = relationship("User", back_populates="chats")
  40. messages = relationship("ChatMessage", back_populates="chat")
  41. class ChatMessage(Base):
  42. """聊天消息"""
  43. __tablename__ = "chat_messages"
  44. id = Column(Integer, primary_key=True, index=True)
  45. chat_id = Column(Integer, ForeignKey("chat_history.id"))
  46. role = Column(String(20)) # user, assistant, system
  47. content = Column(Text)
  48. timestamp = Column(DateTime, default=datetime.utcnow)
  49. # 关系
  50. chat = relationship("ChatHistory", back_populates="messages")
  51. class ResearchHistory(Base):
  52. """研究历史记录"""
  53. __tablename__ = "research_history"
  54. id = Column(Integer, primary_key=True, index=True)
  55. user_id = Column(Integer, ForeignKey("users.id"))
  56. title = Column(String(200))
  57. research_intent = Column(Text)
  58. created_at = Column(DateTime, default=datetime.utcnow)
  59. updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
  60. # 存储研究结果
  61. keywords = Column(JSON, default=list)
  62. directions = Column(JSON, default=list)
  63. papers = Column(JSON, default=list)
  64. # 关系
  65. user = relationship("User", back_populates="researches")
  66. # 注释掉以下新增字段
  67. # research_type = Column(String(50), default="general")
  68. # favorited_papers = Column(JSON, default=list)
  69. # notes = Column(Text, nullable=True)