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"]) @router.post("/") 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"}