Spaces:
Sleeping
Sleeping
| # backend/models.py | |
| import uuid | |
| import datetime | |
| from sqlalchemy.ext.declarative import declarative_base | |
| from sqlalchemy import Column, String, DateTime, ForeignKey, Text, ARRAY, Boolean | |
| from sqlalchemy.dialects.postgresql import UUID | |
| from sqlalchemy.orm import relationship | |
| from sqlalchemy.sql import func | |
| Base = declarative_base() | |
| class User(Base): | |
| __tablename__ = "users" | |
| id = Column(String, primary_key=True, index=True) | |
| name = Column(String) | |
| hashed_password = Column(String) | |
| department = Column(String) | |
| role = Column(String, default="department") | |
| documents = relationship("Document", back_populates="uploader") | |
| # --- ADD THIS RELATIONSHIP --- | |
| questions = relationship("Question", back_populates="user") | |
| class Document(Base): | |
| __tablename__ = "documents" | |
| id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) | |
| title = Column(String, index=True) | |
| upload_date = Column(DateTime, default=datetime.datetime.utcnow) | |
| file_path = Column(String, unique=True) | |
| uploader_id = Column(String, ForeignKey("users.id")) | |
| department = Column(String, index=True) | |
| status = Column(String, default="completed", index=True) | |
| summary = Column(Text, nullable=True) | |
| deadlines = Column(ARRAY(String), nullable=True) | |
| financial_terms = Column(ARRAY(String), nullable=True) | |
| highlighted_file_path = Column(String, nullable=True) | |
| uploader = relationship("User", back_populates="documents") | |
| class Question(Base): | |
| __tablename__ = "questions" | |
| id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) | |
| document_id = Column(UUID(as_uuid=True), ForeignKey("documents.id"), nullable=False) | |
| question_text = Column(Text, nullable=False) | |
| answer_text = Column(Text, nullable=True) | |
| asked_at = Column(DateTime, default=datetime.datetime.utcnow) | |
| user_id = Column(String, ForeignKey("users.id")) | |
| document = relationship("Document") | |
| # This relationship now correctly points to the 'questions' property in the User model | |
| user = relationship("User", back_populates="questions") | |
| class Notification(Base): | |
| __tablename__ = "notifications" | |
| id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) | |
| document_id = Column(UUID(as_uuid=True), ForeignKey("documents.id"), nullable=False) | |
| department = Column(String, nullable=False, index=True) | |
| message = Column(String, nullable=False) | |
| is_read = Column(Boolean, default=False) | |
| created_at = Column(DateTime(timezone=True), server_default=func.now()) |