File size: 2,345 Bytes
657674a
dcde7f3
c9abf3f
 
dcde7f3
c9abf3f
 
 
 
 
 
96b7a3d
c9abf3f
e1145b3
dcde7f3
 
 
 
 
 
eccafb0
 
 
 
 
dcde7f3
 
 
657674a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
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)
    # πŸ‘‡ ADD THESE TWO LINES
    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)