kochi-metro-backend / models.py
yashita13's picture
Upload 17 files
e69d432 verified
# 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())