| from fastapi import APIRouter, HTTPException, Header, Body |
| from typing import List, Optional, Dict, Any |
| from ...core.database import db_manager |
| from ...core.config import settings |
| import logging |
| import time |
|
|
| router = APIRouter(prefix="/admin", tags=["admin"]) |
| logger = logging.getLogger("api.admin") |
|
|
| @router.post("/login") |
| async def admin_login(payload: Dict[str, str] = Body(...)): |
| password = payload.get("password") |
| if password == settings.ADMIN_PASSWORD: |
| |
| return {"status": "success", "token": "admin_master_token_2025"} |
| raise HTTPException(status_code=401, detail="كلمة المرور غير صحيحة") |
|
|
| @router.get("/stats") |
| async def get_stats(authorization: str = Header(None)): |
| if authorization != "admin_master_token_2025": |
| raise HTTPException(status_code=401, detail="غير مصرح لك") |
| |
| async with db_manager.get_connection() as db: |
| |
| cursor = await db.execute("SELECT COUNT(*) as count FROM users") |
| user_count = (await cursor.fetchone())["count"] |
| |
| |
| cursor = await db.execute("SELECT COUNT(*) as count FROM movies") |
| movie_count = (await cursor.fetchone())["count"] |
| |
| |
| cursor = await db.execute("SELECT SUM(watch_time_total) as total FROM users") |
| total_seconds = (await cursor.fetchone())["total"] or 0 |
| total_hours = total_seconds // 3600 |
| |
| |
| cursor = await db.execute("SELECT COUNT(*) as count FROM users WHERE is_fan = 1") |
| fan_count = (await cursor.fetchone())["count"] |
| |
| |
| cursor = await db.execute(""" |
| SELECT id, points, watch_time_total, is_fan, created_at |
| FROM users |
| ORDER BY created_at DESC |
| LIMIT 20 |
| """) |
| recent_users = [dict(row) for row in await cursor.fetchall()] |
|
|
| |
| cursor = await db.execute(""" |
| SELECT id, watch_time_total, points |
| FROM users |
| ORDER BY watch_time_total DESC |
| LIMIT 5 |
| """) |
| top_watchers = [dict(row) for row in await cursor.fetchall()] |
| |
| return { |
| "stats": { |
| "total_users": user_count, |
| "total_movies": movie_count, |
| "total_watch_hours": total_hours, |
| "fan_users": fan_count |
| }, |
| "recent_users": recent_users, |
| "top_watchers": top_watchers |
| } |
|
|
| @router.post("/users/update_points") |
| async def update_user_points(payload: Dict[str, Any] = Body(...), authorization: str = Header(None)): |
| if authorization != "admin_master_token_2025": |
| raise HTTPException(status_code=401, detail="غير مصرح لك") |
| |
| user_id = payload.get("user_id") |
| points = payload.get("points") |
| |
| async with db_manager.get_connection() as db: |
| await db.execute("UPDATE users SET points = ? WHERE id = ?", (points, user_id)) |
| await db.commit() |
| |
| return {"status": "success"} |
|
|
| @router.delete("/users/{user_id}") |
| async def delete_user(user_id: str, authorization: str = Header(None)): |
| if authorization != "admin_master_token_2025": |
| raise HTTPException(status_code=401, detail="غير مصرح لك") |
| |
| async with db_manager.get_connection() as db: |
| await db.execute("DELETE FROM users WHERE id = ?", (user_id,)) |
| await db.commit() |
| |
| return {"status": "success"} |
|
|