Watch
1
0
Fork
You've already forked Seyyed_arc
0
forked from hesabix/arc
Seyyed_arc/hesabixAPI/adapters/api/v1/ai/voice_feedback.py
2026-04-14 19:34:55 +03:30

44 lines
1.5 KiB
Python
Executable file

from __future__ import annotations
from typing import Any, Dict, Optional
from fastapi import APIRouter, Depends, Request, Path, Body
from pydantic import BaseModel, Field
from sqlalchemy.orm import Session
from adapters.db.session import get_db
from adapters.db.models.ai_voice_interaction import AIVoiceInteraction
from app.core.auth_dependency import get_current_user, AuthContext
from app.core.responses import success_response, ApiError
router = APIRouter(prefix="/ai/voice", tags=["هوش مصنوعی"])
class VoiceFeedbackRequest(BaseModel):
rating: int = Field(..., ge=1, le=5, description="امتیاز کیفیت صدا (1 تا 5)")
feedback_text: Optional[str] = Field(None, description="نظر کاربر درباره کیفیت صدا")
@router.post("/interactions/{interaction_id}/feedback", summary="ثبت بازخورد کیفیت صدای AI")
async def submit_voice_feedback(
interaction_id: int = Path(...),
request: Request = None,
payload: VoiceFeedbackRequest = Body(...),
db: Session = Depends(get_db),
ctx: AuthContext = Depends(get_current_user),
) -> Dict[str, Any]:
obj = db.get(AIVoiceInteraction, interaction_id)
if not obj:
raise ApiError("NOT_FOUND", "تعامل صوتی یافت نشد", http_status=404)
if obj.user_id != ctx.get_user_id():
raise ApiError("FORBIDDEN", "دسترسی غیرمجاز", http_status=403)
obj.rating = payload.rating
obj.feedback_text = payload.feedback_text
db.add(obj)
db.commit()
return success_response({"id": obj.id, "rating": obj.rating}, request, "بازخورد ثبت شد")