Spaces:
Sleeping
Sleeping
| """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 | |
| 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") | |
| 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") | |