muryshev's picture
init
57cf043
raw
history blame
2.86 kB
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