43 lines
2.1 KiB
Python
43 lines
2.1 KiB
Python
from fastapi import APIRouter, Depends
|
|
from sqlalchemy import or_
|
|
from sqlalchemy.orm import Session
|
|
|
|
from app import models, schemas
|
|
from app.database import get_db
|
|
|
|
router = APIRouter(prefix="/dashboard", tags=["dashboard"])
|
|
|
|
|
|
@router.get("/summary", response_model=schemas.DashboardSummary)
|
|
def dashboard_summary(db: Session = Depends(get_db)) -> schemas.DashboardSummary:
|
|
last_task = db.query(models.TaskRun).order_by(models.TaskRun.created_at.desc()).first()
|
|
return schemas.DashboardSummary(
|
|
total_sessions=db.query(models.FeishuSession).count(),
|
|
processed_sessions=db.query(models.FeishuSession)
|
|
.filter(models.FeishuSession.process_status.in_([models.ProcessStatus.pending_review, models.ProcessStatus.completed]))
|
|
.count(),
|
|
pending_review_count=db.query(models.RawQAItem)
|
|
.filter(models.RawQAItem.review_status.in_([models.ReviewStatus.pending, models.ReviewStatus.reviewing]))
|
|
.count(),
|
|
high_risk_count=db.query(models.RawQAItem)
|
|
.filter(or_(models.RawQAItem.risk_level == models.RiskLevel.high, models.RawQAItem.risk_level == models.RiskLevel.forbidden))
|
|
.count(),
|
|
approved_qa_count=db.query(models.RawQAItem).filter(models.RawQAItem.review_status == models.ReviewStatus.approved).count(),
|
|
standard_qa_count=db.query(models.StandardQAItem).count(),
|
|
callable_qa_count=db.query(models.StandardQAItem)
|
|
.join(models.RawQAItem)
|
|
.filter(
|
|
models.StandardQAItem.audit_status == models.AuditStatus.approved,
|
|
models.StandardQAItem.call_status == models.CallStatus.callable,
|
|
models.StandardQAItem.risk_level.in_([models.RiskLevel.low, models.RiskLevel.medium]),
|
|
models.RawQAItem.desensitization_status.in_(
|
|
[models.DesensitizationStatus.done, models.DesensitizationStatus.not_needed]
|
|
),
|
|
)
|
|
.count(),
|
|
last_task_status=last_task.task_status.value if last_task else None,
|
|
last_task_time=last_task.ended_at if last_task else None,
|
|
last_task_error=last_task.error_message if last_task else None,
|
|
)
|
|
|