Spaces:
Running
Running
| from fastapi import APIRouter, Depends, HTTPException, BackgroundTasks | |
| from sqlalchemy.orm import Session | |
| from app.db.session import get_db | |
| from app.models.feedback_model import Feedback | |
| from app.core.auth_dependancy import get_current_user | |
| from app.schemas.feedback_schema import FeedbackCreate | |
| from app.ai.meta_classifier import retrain_from_feedback | |
| from app.api.file_routes import decode_id | |
| router = APIRouter(prefix="/feedback", tags=["Feedback"]) | |
| def submit_feedback( | |
| payload: FeedbackCreate, | |
| background_tasks: BackgroundTasks, | |
| db: Session = Depends(get_db), | |
| user = Depends(get_current_user) | |
| ): | |
| try: | |
| real_file_id = decode_id(payload.file_id) | |
| except HTTPException: | |
| raise HTTPException(status_code=400, detail="Invalid file ID") | |
| # Check if user already submitted feedback for this file | |
| existing = db.query(Feedback).filter(Feedback.file_id == real_file_id, Feedback.user_id == user.id).first() | |
| if existing: | |
| raise HTTPException(status_code=400, detail="Feedback already submitted for this file.") | |
| fb = Feedback( | |
| file_id=real_file_id, | |
| user_id=user.id, | |
| label=payload.label, | |
| confidence=payload.confidence, | |
| freq_score=payload.freq_score, | |
| cnn_score=payload.cnn_score | |
| ) | |
| db.add(fb) | |
| db.commit() | |
| # Trigger async retraining check | |
| background_tasks.add_task(retrain_from_feedback) | |
| return {"message": "Feedback saved"} |