feat(admin): HTML leads list with filter + top empresas + download stats

This commit is contained in:
2026-05-13 16:20:32 +00:00
parent b5aedb86b1
commit 7b1b28ead8
3 changed files with 220 additions and 2 deletions

View File

@@ -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)):