|
|
from sqlalchemy import String, LargeBinary, JSON, ForeignKey, Text, DateTime |
|
|
from sqlalchemy.orm import Mapped, mapped_column, relationship |
|
|
from datetime import datetime |
|
|
from app.database import Base |
|
|
from typing import List |
|
|
|
|
|
class User(Base): |
|
|
__tablename__ = "users" |
|
|
|
|
|
id: Mapped[int] = mapped_column(primary_key=True, index=True) |
|
|
username: Mapped[str] = mapped_column(String(50), unique=True, index=True) |
|
|
email: Mapped[str] = mapped_column(String(100), unique=True, index=True) |
|
|
hashed_password: Mapped[str] = mapped_column(String(255)) |
|
|
|
|
|
pdf_data: Mapped[list["PDFData"]] = relationship(back_populates="user") |
|
|
|
|
|
class PDFData(Base): |
|
|
__tablename__ = "pdf_data" |
|
|
|
|
|
id: Mapped[int] = mapped_column(primary_key=True, index=True) |
|
|
|
|
|
filename: Mapped[str] = mapped_column(String(255)) |
|
|
created_at: Mapped[datetime] = mapped_column(default=datetime.utcnow) |
|
|
|
|
|
|
|
|
pdf_blob: Mapped[bytes] = mapped_column(LargeBinary) |
|
|
pdf_embedding: Mapped[list[float]] = mapped_column(JSON) |
|
|
user_id: Mapped[int] = mapped_column(ForeignKey('users.id')) |
|
|
|
|
|
user: Mapped["User"] = relationship(back_populates="pdf_data") |
|
|
chat_sessions: Mapped[List["ChatSession"]] = relationship(back_populates="pdf_data", cascade="all, delete-orphan") |
|
|
|
|
|
class ChatSession(Base): |
|
|
__tablename__ = "chat_sessions" |
|
|
|
|
|
id: Mapped[str] = mapped_column(String, primary_key=True) |
|
|
name: Mapped[str] = mapped_column(String(100)) |
|
|
created_at: Mapped[datetime] = mapped_column(default=datetime.utcnow) |
|
|
|
|
|
pdf_id: Mapped[int] = mapped_column(ForeignKey('pdf_data.id')) |
|
|
pdf_data: Mapped["PDFData"] = relationship(back_populates="chat_sessions") |
|
|
|
|
|
user_id: Mapped[int] = mapped_column(ForeignKey('users.id')) |
|
|
|
|
|
messages: Mapped[List["ChatMessage"]] = relationship(back_populates="session", cascade="all, delete-orphan") |
|
|
|
|
|
class ChatMessage(Base): |
|
|
__tablename__ = "chat_messages" |
|
|
|
|
|
id: Mapped[int] = mapped_column(primary_key=True, index=True) |
|
|
session_id: Mapped[str] = mapped_column(ForeignKey('chat_sessions.id')) |
|
|
session: Mapped["ChatSession"] = relationship(back_populates="messages") |
|
|
|
|
|
role: Mapped[str] = mapped_column(String(20)) |
|
|
content: Mapped[str] = mapped_column(Text) |
|
|
created_at: Mapped[datetime] = mapped_column(default=datetime.utcnow) |