git-subtree-dir: gerenciador git-subtree-mainline:f4f546c928git-subtree-split:34cc9c75a5
81 lines
2.5 KiB
Python
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()
|