Files
GTI_GERENCIADOR_FISCAL/gerenciador/app/db/log.py
T
gti d95165fc8f Add 'gerenciador/' from commit '34cc9c75a57dedbf61a6e6a1ba1f35f76e72434b'
git-subtree-dir: gerenciador
git-subtree-mainline: f4f546c928
git-subtree-split: 34cc9c75a5
2026-09-29 14:43:12 -03:00

81 lines
2.5 KiB
Python

"""
Log de ações do painel (LOG_PAINEL) — uma linha por ação que muda estado
(criar/editar/excluir cliente, adicionar/editar/excluir contato), sucesso
ou erro. Escrita feita pelos routers via `registrar(...)`, nunca
sobrescrita/editada depois — é histórico, não estado.
A tabela já existe no banco de dev. Em qualquer outro ambiente (produção),
crie-a primeiro com:
CREATE TABLE LOG_PAINEL (
ID INT UNSIGNED NOT NULL AUTO_INCREMENT,
CRIADO_EM DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
USUARIO VARCHAR(60) NOT NULL,
ACAO VARCHAR(40) NOT NULL,
ENTIDADE VARCHAR(20) NOT NULL,
ENTIDADE_ID VARCHAR(20) DEFAULT NULL,
SUCESSO TINYINT(1) NOT NULL,
DETALHE VARCHAR(500) DEFAULT NULL,
PRIMARY KEY (ID),
KEY IDX_LOG_PAINEL_CRIADO_EM (CRIADO_EM)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
"""
from .connection import get_connection
def registrar(
usuario: str,
acao: str,
entidade: str,
entidade_id: str | None,
sucesso: bool,
detalhe: str | None = None,
) -> None:
conn = get_connection()
try:
with conn.cursor() as cur:
cur.execute(
"INSERT INTO LOG_PAINEL (USUARIO, ACAO, ENTIDADE, ENTIDADE_ID, SUCESSO, DETALHE) "
"VALUES (%s, %s, %s, %s, %s, %s)",
(usuario, acao, entidade, entidade_id, 1 if sucesso else 0, detalhe),
)
finally:
conn.close()
def listar(limite: int = 100, offset: int = 0) -> list[dict]:
conn = get_connection()
try:
with conn.cursor() as cur:
cur.execute(
"SELECT ID, CRIADO_EM, USUARIO, ACAO, ENTIDADE, ENTIDADE_ID, SUCESSO, DETALHE "
"FROM LOG_PAINEL ORDER BY CRIADO_EM DESC, ID DESC LIMIT %s OFFSET %s",
(limite, offset),
)
return cur.fetchall()
finally:
conn.close()
def contar() -> int:
conn = get_connection()
try:
with conn.cursor() as cur:
cur.execute("SELECT COUNT(*) AS total FROM LOG_PAINEL")
return cur.fetchone()["total"]
finally:
conn.close()
def limpar() -> None:
"""Apaga todo o histórico de LOG_PAINEL. Quem chama (o router) grava
uma entrada nova logo depois disso, registrando quem limpou — nunca
chamar isso sem seguir com um registrar() depois, senão o rastro da
própria limpeza se perde."""
conn = get_connection()
try:
with conn.cursor() as cur:
cur.execute("DELETE FROM LOG_PAINEL")
finally:
conn.close()