File size: 1,677 Bytes
da3b695 f3b2b2d da3b695 f3b2b2d da3b695 | 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 57 58 59 60 | from sqlalchemy.orm import sessionmaker, Session
from sqlalchemy import create_engine, Column, Integer, String, Float, ForeignKey
from sqlalchemy.orm import declarative_base, relationship, sessionmaker
import os
from app.core.config import settings
DB_URL=settings.DATABASE_URL
# This loads the variables from your .env file into the system environment
# Access them using os.getenv()
Base = declarative_base()
# This table handles the "list of user ids" by linking users to complaints
class ComplaintUser(Base):
__tablename__ = 'complaint_users'
id = Column(Integer, primary_key=True)
complaint_id = Column(Integer, ForeignKey('complaints.id'))
user_id = Column(Integer, nullable=False)
class Complaint(Base):
__tablename__ = 'complaints'
id = Column(Integer, primary_key=True, autoincrement=True)
page_content = Column(String, nullable=False)
frequency = Column(Integer, default=1)
# Location stored as high-precision floats
latitude = Column(Float, nullable=False)
longitude = Column(Float, nullable=False)
priority_score = Column(Float, default=0.0)
department = Column(String, nullable=False)
urgency_level = Column(String, nullable=False)
# Relationship to get the list of users easily
# Access via: complaint_obj.users
users = relationship("ComplaintUser", backref="complaint", cascade="all, delete-orphan")
# --- Table Creation Logic ---
engine = create_engine(
DB_URL,
echo=False,
pool_pre_ping=True,
pool_recycle=1800
)
SessionLocal = sessionmaker(bind=engine, autoflush=False, autocommit=False)
def get_session() -> Session:
return SessionLocal() |