SumakaClone / backend /app /api /v1 /admin.py
raghava0450's picture
Deploy SumakaClone Space configuration
92d8b0d verified
Raw
History Blame Contribute Delete
1.63 kB
from __future__ import annotations
from fastapi import APIRouter, Depends, Query
from app.api.deps import CurrentAdmin, get_services
from app.models.schemas import ApiMessage, BroadcastRequest, CreditAdjustmentRequest
from app.services.container import Services
router = APIRouter(prefix="/admin", tags=["admin"])
@router.get("/stats")
async def stats(_: CurrentAdmin, services: Services = Depends(get_services)) -> dict:
return await services.admin.dashboard_snapshot()
@router.get("/users")
async def list_users(
_: CurrentAdmin,
services: Services = Depends(get_services),
query: str | None = Query(default=None),
limit: int = Query(default=50, ge=1, le=200),
) -> list[dict]:
return await services.admin.list_users(query=query, limit=limit)
@router.get("/jobs")
async def list_jobs(
_: CurrentAdmin,
services: Services = Depends(get_services),
limit: int = Query(default=50, ge=1, le=200),
) -> list[dict]:
return await services.admin.list_jobs(limit=limit)
@router.post("/credits/grant")
async def grant_credits(
payload: CreditAdjustmentRequest,
admin_user: CurrentAdmin,
services: Services = Depends(get_services),
) -> dict:
return await services.admin.grant_credits(admin_user.id or "", payload)
@router.post("/broadcasts", response_model=ApiMessage)
async def broadcast(
payload: BroadcastRequest,
admin_user: CurrentAdmin,
services: Services = Depends(get_services),
) -> ApiMessage:
result = await services.admin.queue_broadcast(admin_user.id or "", payload)
return ApiMessage(message="Broadcast queued.", details=result)