grant-radar / src /api /feedback.py
Riley Coleman
feat: integrate MongoDB for data persistence
c988aaf
Raw
History Blame Contribute Delete
2.26 kB
"""Feedback endpoints for user feedback collection."""
from fastapi import APIRouter, HTTPException
from pydantic import BaseModel
from typing import Optional
import logging
from datetime import datetime
from src.database import FeedbackStore
logger = logging.getLogger(__name__)
router = APIRouter(prefix="/feedback", tags=["feedback"])
feedback_store = FeedbackStore()
class FeedbackRequest(BaseModel):
"""User feedback request model."""
query: str
response: str
rating: Optional[int] = None # 1-5 star rating
comments: Optional[str] = None
user_id: Optional[str] = None
class FeedbackResponse(BaseModel):
"""Response model for feedback submission."""
status: str
message: str
feedback_id: str
@router.post("", response_model=FeedbackResponse)
async def submit_feedback(feedback: FeedbackRequest):
"""
Submit user feedback.
Args:
feedback: User feedback data
Returns:
Feedback submission confirmation
"""
try:
feedback_data = {
"query": feedback.query,
"response": feedback.response,
"rating": feedback.rating,
"comments": feedback.comments,
"user_id": feedback.user_id,
"created_at": datetime.utcnow()
}
feedback_id = feedback_store.save_feedback(feedback_data)
logger.info(
f"Feedback stored: {feedback_id} | "
f"Rating: {feedback.rating} | "
f"User: {feedback.user_id}"
)
return FeedbackResponse(
status="success",
message="Feedback received successfully",
feedback_id=feedback_id
)
except Exception as e:
logger.error(f"Error submitting feedback: {e}")
raise HTTPException(status_code=500, detail="Failed to submit feedback")
@router.get("/stats")
async def get_feedback_stats():
"""Get feedback statistics."""
try:
stats = feedback_store.get_feedback_stats()
return {
"status": "success",
"data": stats
}
except Exception as e:
logger.error(f"Error getting feedback stats: {e}")
raise HTTPException(status_code=500, detail="Failed to get feedback statistics")