|
from fastapi import APIRouter, Depends, HTTPException, status |
|
from sqlalchemy.orm import Session |
|
from typing import List |
|
from datetime import datetime, timezone |
|
|
|
from ..database import get_db, Feedback as FeedbackModel, Order, Person |
|
from ..models.feedback import Feedback, FeedbackCreate |
|
|
|
router = APIRouter( |
|
prefix="/feedback", |
|
tags=["feedback"], |
|
responses={404: {"description": "Not found"}}, |
|
) |
|
|
|
|
|
|
|
@router.post("/", response_model=Feedback) |
|
def create_feedback(feedback: FeedbackCreate, db: Session = Depends(get_db)): |
|
|
|
db_order = db.query(Order).filter(Order.id == feedback.order_id).first() |
|
if not db_order: |
|
raise HTTPException(status_code=404, detail="Order not found") |
|
|
|
|
|
if feedback.person_id: |
|
db_person = db.query(Person).filter(Person.id == feedback.person_id).first() |
|
if not db_person: |
|
raise HTTPException(status_code=404, detail="Person not found") |
|
|
|
|
|
db_feedback = FeedbackModel( |
|
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 |
|
|
|
|
|
|
|
@router.get("/", response_model=List[Feedback]) |
|
def get_all_feedback(db: Session = Depends(get_db)): |
|
return db.query(FeedbackModel).all() |
|
|
|
|
|
|
|
@router.get("/order/{order_id}", response_model=Feedback) |
|
def get_feedback_by_order(order_id: int, db: Session = Depends(get_db)): |
|
db_feedback = db.query(FeedbackModel).filter(FeedbackModel.order_id == order_id).first() |
|
if not db_feedback: |
|
raise HTTPException(status_code=404, detail="Feedback not found") |
|
return db_feedback |
|
|
|
|
|
|
|
@router.get("/person/{person_id}", response_model=List[Feedback]) |
|
def get_feedback_by_person(person_id: int, db: Session = Depends(get_db)): |
|
return db.query(FeedbackModel).filter(FeedbackModel.person_id == person_id).all() |
|
|