feat: AI Worker 平台 MVP v1.0.0 - 多租户/项目管理/AI Worker/任务编排/HITL审核/成本治理
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
"""Dashboard endpoints: overview stats."""
|
||||
from fastapi import APIRouter, Depends
|
||||
from sqlalchemy.orm import Session
|
||||
from sqlalchemy import func
|
||||
from app.database import get_db
|
||||
from app.api.deps import get_current_user
|
||||
from app.models.user import User
|
||||
from app.models.project import Project
|
||||
from app.models.task import Task
|
||||
from app.models.worker import AIWorker
|
||||
from app.models.review import Review
|
||||
from app.services.cost_service import CostService
|
||||
|
||||
router = APIRouter(prefix="/dashboard")
|
||||
|
||||
|
||||
@router.get("")
|
||||
def dashboard(
|
||||
user: User = Depends(get_current_user),
|
||||
db: Session = Depends(get_db),
|
||||
):
|
||||
tid = user.tenant_id
|
||||
|
||||
projects = db.query(Project).filter(Project.tenant_id == tid).count()
|
||||
tasks = db.query(Task).filter(Task.tenant_id == tid)
|
||||
workers = db.query(AIWorker).filter(AIWorker.tenant_id == tid, AIWorker.is_active == True).count()
|
||||
pending_reviews = db.query(Review).filter(
|
||||
Review.tenant_id == tid, Review.status == "pending"
|
||||
).count()
|
||||
|
||||
task_status_counts = {}
|
||||
for row in db.query(Task.status, func.count()).filter(Task.tenant_id == tid).group_by(Task.status).all():
|
||||
task_status_counts[row[0]] = row[1]
|
||||
|
||||
cost_summary = CostService.get_tenant_cost_summary(db, tid)
|
||||
|
||||
return {
|
||||
"projects": projects,
|
||||
"tasks": tasks.count(),
|
||||
"active_workers": workers,
|
||||
"pending_reviews": pending_reviews,
|
||||
"task_status": task_status_counts,
|
||||
"cost": cost_summary,
|
||||
"user": {
|
||||
"id": user.id,
|
||||
"username": user.username,
|
||||
"role": user.role,
|
||||
},
|
||||
}
|
||||
Reference in New Issue
Block a user