PMFlow/backend/app/api/feedbacks.py

58 lines
1.6 KiB
Python

"""反馈统计 API"""
from fastapi import APIRouter, Depends
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.future import select
from ..database import get_db
from ..models import SignalFeedback
router = APIRouter(prefix="/feedbacks", tags=["feedbacks"])
@router.get("/stats")
async def get_feedback_stats(db: AsyncSession = Depends(get_db)):
"""获取反馈统计"""
result = await db.execute(select(SignalFeedback))
all_feedbacks = result.scalars().all()
total = len(all_feedbacks)
if total == 0:
return {
"total_feedbacks": 0,
"accuracy": 0.0,
"true_positives": 0,
"false_positives": 0,
"true_negatives": 0,
"false_negatives": 0,
}
correct = sum(
1 for f in all_feedbacks if f.ai_predicted_strategic == f.was_strategic
)
true_positives = sum(
1 for f in all_feedbacks if f.ai_predicted_strategic and f.was_strategic
)
false_positives = sum(
1 for f in all_feedbacks if f.ai_predicted_strategic and not f.was_strategic
)
true_negatives = sum(
1
for f in all_feedbacks
if not f.ai_predicted_strategic and not f.was_strategic
)
false_negatives = sum(
1
for f in all_feedbacks
if not f.ai_predicted_strategic and f.was_strategic
)
return {
"total_feedbacks": total,
"accuracy": correct / total,
"true_positives": true_positives,
"false_positives": false_positives,
"true_negatives": true_negatives,
"false_negatives": false_negatives,
}