feat: limite de 20 registros e botao de limpar log (admin)

This commit is contained in:
Gustavo
2026-08-20 10:52:48 -03:00
parent 9fbc57b0ad
commit 4ec3c8df88
3 changed files with 103 additions and 9 deletions
+38 -5
View File
@@ -2,25 +2,58 @@
Rota /log: histórico de ações do painel (LOG_PAINEL, app/db/log.py) e,
quando configurado, os últimos envios automáticos de chave via WhatsApp
(Data Table pagamentos_processados do n8n, app/n8n_client.py).
Mostra só os 20 registros de LOG_PAINEL mais recentes — sem paginação.
Administradores têm um botão para limpar o histórico inteiro
(POST /log/limpar); db_log.limpar() apaga tudo e o router grava, logo em
seguida, uma única entrada de auditoria registrando quem limpou e quando
— por isso o histórico nunca fica sem nenhuma explicação do que
aconteceu com ele.
"""
from typing import Optional
from urllib.parse import urlencode
from fastapi import APIRouter, Depends, Request
from fastapi.responses import HTMLResponse
from fastapi.responses import HTMLResponse, RedirectResponse
from fastapi.templating import Jinja2Templates
from .. import n8n_client
from ..auth import exigir_login
from ..auth import UsuarioLogado, exigir_admin, exigir_login
from ..csrf import exigir_csrf, token_do_contexto
from ..db import log as db_log
router = APIRouter()
templates = Jinja2Templates(directory="app/templates")
LIMITE_ACOES = 20
def _redirect_com_mensagem(mensagem: str, tipo: str = "success") -> RedirectResponse:
return RedirectResponse(f"/log?{urlencode({'mensagem': mensagem, 'mensagem_tipo': tipo})}", status_code=303)
@router.get("/log", response_class=HTMLResponse)
def pagina(request: Request, usuario: str = Depends(exigir_login)):
acoes = db_log.listar(limite=100)
def pagina(
request: Request,
mensagem: Optional[str] = None,
mensagem_tipo: Optional[str] = None,
usuario: UsuarioLogado = Depends(exigir_login),
):
acoes = db_log.listar(limite=LIMITE_ACOES)
envios = n8n_client.listar_envios(limite=50)
return templates.TemplateResponse(
request,
"log.html",
{"acoes": acoes, "envios": envios, "envios_configurado": n8n_client.configurado()},
{
"acoes": acoes, "envios": envios, "envios_configurado": n8n_client.configurado(),
"eh_admin": usuario.eh_admin, "csrf_token": token_do_contexto(request),
"mensagem": mensagem, "mensagem_tipo": mensagem_tipo,
},
)
@router.post("/log/limpar", dependencies=[Depends(exigir_csrf)])
def limpar(usuario: UsuarioLogado = Depends(exigir_admin)):
db_log.limpar()
db_log.registrar(str(usuario), "limpar", "log", None, True)
return _redirect_com_mensagem("Log limpo.")