Add 'gerenciador/' from commit '34cc9c75a57dedbf61a6e6a1ba1f35f76e72434b'
git-subtree-dir: gerenciador git-subtree-mainline:f4f546c928git-subtree-split:34cc9c75a5
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
"""
|
||||
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()
|
||||
Reference in New Issue
Block a user