feat(admin): HTML leads list with filter + top empresas + download stats
This commit is contained in:
30
app/admin.py
30
app/admin.py
@@ -2,8 +2,9 @@ import csv
|
||||
import io
|
||||
from pathlib import Path
|
||||
|
||||
from fastapi import APIRouter, Depends, File, Form, HTTPException, Query, UploadFile
|
||||
from fastapi.responses import Response
|
||||
from fastapi import APIRouter, Depends, File, Form, HTTPException, Query, Request, UploadFile
|
||||
from fastapi.responses import HTMLResponse, Response
|
||||
from fastapi.templating import Jinja2Templates
|
||||
|
||||
from app.config import get_settings
|
||||
from app.db import list_leads, stats
|
||||
@@ -12,6 +13,31 @@ from app.security import require_admin
|
||||
|
||||
router = APIRouter(prefix="/admin", tags=["admin"])
|
||||
|
||||
_TEMPLATES_DIR = Path(__file__).parent / "templates"
|
||||
templates = Jinja2Templates(directory=str(_TEMPLATES_DIR))
|
||||
|
||||
|
||||
@router.get("/leads.html", response_class=HTMLResponse)
|
||||
@router.get("/leads", response_class=HTMLResponse)
|
||||
def admin_leads_html(
|
||||
request: Request,
|
||||
_user: str = Depends(require_admin),
|
||||
limit: int = Query(1000, ge=1, le=10000),
|
||||
):
|
||||
leads = list_leads(limit=limit, offset=0)
|
||||
s = stats()
|
||||
return templates.TemplateResponse(
|
||||
"admin_leads.html",
|
||||
{
|
||||
"request": request,
|
||||
"leads": leads,
|
||||
"total": s["total_leads"],
|
||||
"total_downloads": s["total_downloads"],
|
||||
"top_empresas": s["top_5_empresas"],
|
||||
"downloads_por_archivo": s["downloads_por_archivo"],
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
@router.get("/material-files")
|
||||
def admin_material_files(_user: str = Depends(require_admin)):
|
||||
|
||||
Reference in New Issue
Block a user