tableeee-v3 / app /routers /feedback.py
Shyamnath's picture
feat(core): implement unified database with multi-hotel support and session management
90537f3
from fastapi import APIRouter, Depends, HTTPException, status, Request
from sqlalchemy.orm import Session
from typing import List
from datetime import datetime, timezone
from ..database import get_db, Feedback as FeedbackModel, Order, Person, get_session_db, get_hotel_id_from_request
from ..models.feedback import Feedback, FeedbackCreate
from ..middleware import get_session_id
router = APIRouter(
prefix="/feedback",
tags=["feedback"],
responses={404: {"description": "Not found"}},
)
# Dependency to get session-aware database
def get_session_database(request: Request):
session_id = get_session_id(request)
return next(get_session_db(session_id))
# Create new feedback
@router.post("/", response_model=Feedback)
def create_feedback(feedback: FeedbackCreate, request: Request, db: Session = Depends(get_session_database)):
hotel_id = get_hotel_id_from_request(request)
# Check if order exists for this hotel
db_order = db.query(Order).filter(
Order.hotel_id == hotel_id,
Order.id == feedback.order_id
).first()
if not db_order:
raise HTTPException(status_code=404, detail="Order not found")
# Check if person exists if person_id is provided
if feedback.person_id:
db_person = db.query(Person).filter(
Person.hotel_id == hotel_id,
Person.id == feedback.person_id
).first()
if not db_person:
raise HTTPException(status_code=404, detail="Person not found")
# Create feedback
db_feedback = FeedbackModel(
hotel_id=hotel_id,
order_id=feedback.order_id,
person_id=feedback.person_id,
rating=feedback.rating,
comment=feedback.comment,
created_at=datetime.now(timezone.utc),
)
db.add(db_feedback)
db.commit()
db.refresh(db_feedback)
return db_feedback
# Get all feedback
@router.get("/", response_model=List[Feedback])
def get_all_feedback(request: Request, db: Session = Depends(get_session_database)):
hotel_id = get_hotel_id_from_request(request)
return db.query(FeedbackModel).filter(FeedbackModel.hotel_id == hotel_id).all()
# Get feedback by order_id
@router.get("/order/{order_id}", response_model=Feedback)
def get_feedback_by_order(order_id: int, request: Request, db: Session = Depends(get_session_database)):
hotel_id = get_hotel_id_from_request(request)
db_feedback = db.query(FeedbackModel).filter(
FeedbackModel.hotel_id == hotel_id,
FeedbackModel.order_id == order_id
).first()
if not db_feedback:
raise HTTPException(status_code=404, detail="Feedback not found")
return db_feedback
# Get feedback by person_id
@router.get("/person/{person_id}", response_model=List[Feedback])
def get_feedback_by_person(person_id: int, request: Request, db: Session = Depends(get_session_database)):
hotel_id = get_hotel_id_from_request(request)
return db.query(FeedbackModel).filter(
FeedbackModel.hotel_id == hotel_id,
FeedbackModel.person_id == person_id
).all()