Spaces:
Sleeping
Sleeping
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 | |
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 | |
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 | |
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 | |
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() | |