""" 数据库模型定义 """ from sqlalchemy import Column, Integer, String, Text, DateTime, ForeignKey, Boolean, JSON from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import relationship from datetime import datetime Base = declarative_base() class User(Base): """用户模型""" __tablename__ = "users" id = Column(Integer, primary_key=True, index=True) username = Column(String(50), unique=True, index=True) email = Column(String(100), unique=True, index=True) hashed_password = Column(String(100)) created_at = Column(DateTime, default=datetime.utcnow) updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) # 用户个人资料信息 avatar = Column(String(200), nullable=True) institution = Column(String(100), default="江西财经大学") position = Column(String(50), default="学生") research_fields = Column(JSON, default=list) # 会员信息 membership_type = Column(String(50), default="高级研究版") expiry_date = Column(DateTime, nullable=True) credits = Column(Integer, default=5000) # 关系 chats = relationship("ChatHistory", back_populates="user") researches = relationship("ResearchHistory", back_populates="user") class ChatHistory(Base): """聊天历史记录""" __tablename__ = "chat_history" id = Column(Integer, primary_key=True, index=True) user_id = Column(Integer, ForeignKey("users.id")) title = Column(String(200), default="新对话") created_at = Column(DateTime, default=datetime.utcnow) updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) # 关系 user = relationship("User", back_populates="chats") messages = relationship("ChatMessage", back_populates="chat") class ChatMessage(Base): """聊天消息""" __tablename__ = "chat_messages" id = Column(Integer, primary_key=True, index=True) chat_id = Column(Integer, ForeignKey("chat_history.id")) role = Column(String(20)) # user, assistant, system content = Column(Text) timestamp = Column(DateTime, default=datetime.utcnow) # 关系 chat = relationship("ChatHistory", back_populates="messages") class ResearchHistory(Base): """研究历史记录""" __tablename__ = "research_history" id = Column(Integer, primary_key=True, index=True) user_id = Column(Integer, ForeignKey("users.id")) title = Column(String(200)) research_intent = Column(Text) created_at = Column(DateTime, default=datetime.utcnow) updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) # 存储研究结果 keywords = Column(JSON, default=list) directions = Column(JSON, default=list) papers = Column(JSON, default=list) # 关系 user = relationship("User", back_populates="researches")