1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- """
- 数据库模型定义
- """
- 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")
-
- # 注释掉以下新增字段
- # research_type = Column(String(50), default="general")
- # favorited_papers = Column(JSON, default=list)
- # notes = Column(Text, nullable=True)
|