| from sqlalchemy import create_engine, Column, Integer, String, DateTime, Text |
| from sqlalchemy.ext.declarative import declarative_base |
| from sqlalchemy.orm import sessionmaker |
| from datetime import datetime |
| import os |
| from dotenv import load_dotenv |
|
|
| load_dotenv() |
|
|
| DATABASE_URL = os.getenv("DATABASE_URL", "sqlite:///./complaints.db") |
|
|
| engine = create_engine(DATABASE_URL) |
| SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) |
| Base = declarative_base() |
|
|
| class Complaint(Base): |
| __tablename__ = "complaints" |
| |
| id = Column(Integer, primary_key=True, index=True) |
| complaint_text = Column(Text, nullable=False) |
| image_path = Column(String, nullable=False) |
| ai_response = Column(Text, nullable=False) |
| created_at = Column(DateTime, default=datetime.utcnow) |
| status = Column(String, default="resolved") |
|
|
| def create_tables(): |
| Base.metadata.create_all(bind=engine) |
|
|
| def get_db(): |
| db = SessionLocal() |
| try: |
| yield db |
| finally: |
| db.close() |
|
|
| def save_complaint(complaint_text: str, image_path: str, ai_response: str): |
| db = SessionLocal() |
| try: |
| complaint = Complaint( |
| complaint_text=complaint_text, |
| image_path=image_path, |
| ai_response=ai_response, |
| status="resolved" |
| ) |
| db.add(complaint) |
| db.commit() |
| db.refresh(complaint) |
| return complaint |
| finally: |
| db.close() |
|
|
| def get_all_complaints(): |
| db = SessionLocal() |
| try: |
| return db.query(Complaint).all() |
| finally: |
| db.close() |