File size: 2,861 Bytes
57cf043
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import logging
from typing import Annotated

from fastapi import APIRouter, Depends
from starlette import status

from common.exceptions import FeedbackNotFoundException, LogNotFoundException
from components.dbo.models.feedback import Feedback
from components.dbo.models.log import Log
from schemas.feedback import FeedbackCreate
import common.dependencies as DI
from sqlalchemy.orm import sessionmaker

router = APIRouter()
logger = logging.getLogger(__name__)


@router.get('/feedbacks', status_code=status.HTTP_200_OK)
async def get_all_feedbacks(db: Annotated[sessionmaker, Depends(DI.get_db)]):
    logger.info("Handling GET request to /feedbacks")
    try:
        with db() as session:
            result = session.query(Feedback).all()
        logger.info(f"Successfully retrieved {len(result)} feedbacks")
        return result
    except Exception as e:
        logger.error(f"Error retrieving feedbacks: {str(e)}")
        raise e


@router.get('/feedback/{feedback_id}', status_code=status.HTTP_200_OK)
async def get_feedback(feedback_id: int, db: Annotated[sessionmaker, Depends(DI.get_db)]):
    logger.info(f"Handling GET request to /feedback/{feedback_id}")
    try:
        with db() as session:
            feedback = (
                session.query(Feedback).filter(Feedback.feedback_id == feedback_id).first()
            )
        if feedback is None:
            logger.warning(f"Feedback not found: {feedback_id}")
            raise FeedbackNotFoundException(feedback_id)
        logger.info(f"Successfully retrieved feedback {feedback_id}")
        return feedback
    except Exception as e:
        logger.error(f"Error retrieving feedback {feedback_id}: {str(e)}")
        raise e


@router.post('/feedback', status_code=status.HTTP_201_CREATED)
async def create_feedback(feedback: FeedbackCreate, db: Annotated[sessionmaker, Depends(DI.get_db)]):
    logger.info("Handling POST request to /feedback")
    try:
        
        with db() as session:
            log_entry = session.query(Log).filter(Log.id == feedback.log_id).first()
            if log_entry is None:
                logger.warning(f"Log not found: {feedback.log_id}")
                raise LogNotFoundException(feedback.log_id)

            new_feedback = Feedback(
                log_id=feedback.log_id,
                userComment=feedback.userComment,
                userScore=feedback.userScore,
                manualEstimate=feedback.manualEstimate,
                llmEstimate=feedback.llmEstimate,
            )

            session.add(new_feedback)
            session.commit()
            session.refresh(new_feedback)

        logger.info(
            f"Successfully created feedback with ID: {new_feedback.id}"
        )
        return new_feedback
    except Exception as e:
        logger.error(f"Error creating feedback: {str(e)}")
        raise e