rfprfprfp / backend /app /models.py
Varun10000's picture
Upload 51 files
c1d533e verified
Raw
History Blame Contribute Delete
2.25 kB
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