Spaces:
Sleeping
Sleeping
File size: 1,740 Bytes
e67ec6b | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | from fastapi import APIRouter, HTTPException, Depends
from core.database import db_manager
router = APIRouter(prefix="/api/admin")
# In production, add a dependency to verify admin API key / JWT
def verify_admin(api_key: str = None):
# Stub for admin verification
# if api_key != "secret-admin-key":
# raise HTTPException(status_code=401, detail="Unauthorized")
return True
@router.get("/analytics")
async def get_analytics(_ = Depends(verify_admin)):
"""
Returns platform-wide statistics for the admin dashboard.
"""
with db_manager.db_lock:
conn = db_manager.get_connection()
cursor = conn.cursor()
# Total tasks
cursor.execute("SELECT COUNT(*) as c FROM tasks")
total_tasks = cursor.fetchone()["c"]
# Tasks by status
cursor.execute("SELECT status, COUNT(*) as c FROM tasks GROUP BY status")
status_counts = {row["status"]: row["c"] for row in cursor.fetchall()}
# Total users
cursor.execute("SELECT COUNT(*) as c FROM users")
total_users = cursor.fetchone()["c"]
# Premium users
cursor.execute("SELECT COUNT(*) as c FROM users WHERE is_premium = 1")
premium_users = cursor.fetchone()["c"]
# Recent tasks
cursor.execute("SELECT task_id, status, created_at, user_email FROM tasks ORDER BY created_at DESC LIMIT 10")
recent_tasks = [dict(row) for row in cursor.fetchall()]
conn.close()
return {
"total_tasks": total_tasks,
"status_counts": status_counts,
"total_users": total_users,
"premium_users": premium_users,
"recent_tasks": recent_tasks
}
|