File size: 2,246 Bytes
c1d533e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from sqlalchemy import Column, Integer, String, Text, DateTime, ForeignKey, Float
from sqlalchemy.orm import relationship
from datetime import datetime
from app.database import Base

class RFP(Base):
    __tablename__ = "rfps"
    
    id = Column(Integer, primary_key=True, index=True)
    title = Column(String(500), nullable=False)
    description = Column(Text)
    created_at = Column(DateTime, default=datetime.utcnow)
    updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
    
    questions = relationship("Question", back_populates="rfp", cascade="all, delete-orphan")

class Question(Base):
    __tablename__ = "questions"
    
    id = Column(Integer, primary_key=True, index=True)
    rfp_id = Column(Integer, ForeignKey("rfps.id"), nullable=False)
    section = Column(String(200))
    question_id = Column(String(50))  # Custom question ID like "Q1.1"
    question_text = Column(Text, nullable=False)
    answer_text = Column(Text, nullable=False)
    page_start = Column(Integer)
    page_end = Column(Integer)
    created_at = Column(DateTime, default=datetime.utcnow)
    updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
    
    rfp = relationship("RFP", back_populates="questions")
    embedding = relationship("QuestionEmbedding", back_populates="question", uselist=False, cascade="all, delete-orphan")

class QuestionEmbedding(Base):
    __tablename__ = "question_embeddings"
    
    id = Column(Integer, primary_key=True, index=True)
    question_id = Column(Integer, ForeignKey("questions.id"), nullable=False, unique=True)
    embedding = Column(Text, nullable=False)  # JSON serialized numpy array
    
    question = relationship("Question", back_populates="embedding")

class UploadedRFP(Base):
    __tablename__ = "uploaded_rfps"
    
    id = Column(Integer, primary_key=True, index=True)
    filename = Column(String(500), nullable=False)
    rfp_name = Column(String(500))  # Friendly name for the RFP
    file_path = Column(String(1000), nullable=False)
    uploaded_at = Column(DateTime, default=datetime.utcnow)
    text_content = Column(Text)  # Extracted text from first 3 pages or full document