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() | |