File size: 2,155 Bytes
80feb1b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
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"}},
)


# Create new feedback
@router.post("/", response_model=Feedback)
def create_feedback(feedback: FeedbackCreate, db: Session = Depends(get_db)):
    # Check if order exists
    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")

    # Check if person exists if person_id is provided
    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")

    # Create feedback
    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


# Get all feedback
@router.get("/", response_model=List[Feedback])
def get_all_feedback(db: Session = Depends(get_db)):
    return db.query(FeedbackModel).all()


# Get feedback by order_id
@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


# Get feedback by person_id
@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()