from sqlalchemy import Column, String, Text, DateTime, Integer, ForeignKey, TIMESTAMP from sqlalchemy.orm import relationship from sqlalchemy.orm import DeclarativeBase from sqlalchemy.sql import func class Base(DeclarativeBase): pass class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True, autoincrement=True) email = Column(String(255)) access_token = Column(Text) refresh_token = Column(Text) expires_at = Column(DateTime) chat_histories = relationship("ChatHistory", back_populates="user") user_logins = relationship("UserLogin", back_populates="user") user_infos = relationship("UserInfo", back_populates="user") class ChatHistory(Base): __tablename__ = 'chat_history' id = Column(Integer, primary_key=True,autoincrement=True) email = Column(String(255), ForeignKey('users.email')) name_chat = Column(String(255), unique=True) user = relationship("User", back_populates="chat_histories") detail_chats = relationship("DetailChat", back_populates="chat_history") class UserLogin(Base): __tablename__ = 'user_login' id = Column(Integer, primary_key=True,autoincrement=True) user_email = Column(String(100), ForeignKey('users.email'), primary_key=True) user_session_id = Column(String(100), primary_key=True) user = relationship("User", back_populates="user_logins") class UserInfo(Base): __tablename__ = 'user_info' id = Column(Integer, primary_key=True, autoincrement=True) uid = Column(Text) email = Column(String(255), ForeignKey('users.email'), unique=True) display_name = Column(Text) photo_url = Column(Text) user = relationship("User", back_populates="user_infos") class DetailChat(Base): __tablename__ = 'detail_chat' id = Column(Integer, primary_key=True, autoincrement=True) chat_id = Column(Integer, ForeignKey('chat_history.id')) YouMessage = Column(Text) AiMessage = Column(Text) data_relevant = Column(Text) source_file = Column(Text) chat_history = relationship("ChatHistory", back_populates="detail_chats") class OTP(Base): __tablename__ = 'otp' id = Column(Integer, primary_key=True, autoincrement=True) email = Column(String(255), nullable=False) otp = Column(String(6), nullable=False) created_at = Column(TIMESTAMP, server_default=func.now())