first commit
This commit is contained in:
37
backend/routers/stats.py
Normal file
37
backend/routers/stats.py
Normal file
@@ -0,0 +1,37 @@
|
||||
from fastapi import APIRouter, Depends
|
||||
from sqlalchemy import func
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from backend.auth import get_current_user
|
||||
from backend.database import get_db
|
||||
from backend.models import ImportHistory, Question
|
||||
|
||||
router = APIRouter(dependencies=[Depends(get_current_user)])
|
||||
|
||||
|
||||
@router.get("")
|
||||
def get_stats(db: Session = Depends(get_db)) -> dict:
|
||||
total = db.query(func.count(Question.id)).scalar() or 0
|
||||
by_type = db.query(Question.question_type, func.count(Question.id)).group_by(Question.question_type).all()
|
||||
by_difficulty = db.query(Question.difficulty, func.count(Question.id)).group_by(Question.difficulty).all()
|
||||
by_chapter = db.query(Question.chapter, func.count(Question.id)).group_by(Question.chapter).all()
|
||||
latest_imports = (
|
||||
db.query(ImportHistory).order_by(ImportHistory.created_at.desc()).limit(10).all()
|
||||
)
|
||||
return {
|
||||
"total": total,
|
||||
"by_type": [{"name": n or "未分类", "value": v} for n, v in by_type],
|
||||
"by_difficulty": [{"name": n or "未分类", "value": v} for n, v in by_difficulty],
|
||||
"by_chapter": [{"name": n or "未分类", "value": v} for n, v in by_chapter],
|
||||
"latest_imports": [
|
||||
{
|
||||
"id": i.id,
|
||||
"filename": i.filename,
|
||||
"method": i.method,
|
||||
"question_count": i.question_count,
|
||||
"status": i.status,
|
||||
"created_at": i.created_at.isoformat(),
|
||||
}
|
||||
for i in latest_imports
|
||||
],
|
||||
}
|
||||
Reference in New Issue
Block a user