Spaces:
Sleeping
Sleeping
File size: 3,064 Bytes
90537f3 |
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 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
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()
|