/
Pepegator
/
task-api
Обзор
Документация
Войти
/
Pepegator
/
task-api
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
lab4
pythonProject2/routers/internal/stats.py
65 строк
2 KB
Pol136
add internal api
30 дек 2025, 12:39
30 дек 2025, 12:39
b881890
Код
Авторство
О чём код?
from fastapi import APIRouter, Depends from sqlalchemy.orm import Session from sqlalchemy import func from typing import Dict, Any from database import get_db, User, Task router = APIRouter() @router.get("/tasks", response_model=Dict[str, Any]) async def get_tasks_statistics(db: Session = Depends(get_db)): total_tasks = db.query(Task).count() total_users = db.query(User).filter(User.is_active == True).count() todo_count = db.query(Task).filter(Task.status == "todo").count() in_progress_count = db.query(Task).filter(Task.status == "in_progress").count() done_count = db.query(Task).filter(Task.status == "done").count() low_count = db.query(Task).filter(Task.priority == "low").count() medium_count = db.query(Task).filter(Task.priority == "medium").count() high_count = db.query(Task).filter(Task.priority == "high").count() users_with_tasks = db.query( User.id, User.username, func.count(Task.id).label("task_count") ).outerjoin(Task).filter(User.is_active == True).group_by( User.id, User.username ).order_by(func.count(Task.id).desc()).limit(10).all() top_users = [ {"user_id": user_id, "username": username, "task_count": task_count} for user_id, username, task_count in users_with_tasks ] return { "total_tasks": total_tasks, "total_active_users": total_users, "tasks_by_status": { "todo": todo_count, "in_progress": in_progress_count, "done": done_count }, "tasks_by_priority": { "low": low_count, "medium": medium_count, "high": high_count }, "users_with_most_tasks": top_users } @router.get("/users", response_model=Dict[str, Any]) async def get_users_statistics(db: Session = Depends(get_db)): total_users = db.query(User).count() active_users = db.query(User).filter(User.is_active == True).count() inactive_users = db.query(User).filter(User.is_active == False).count() return { "total_users": total_users, "active_users": active_users, "inactive_users": inactive_users }