Class ResetarPowersyncRepository
java.lang.Object
br.com.vantroba.bi.transporte.powersync.ResetarPowersyncRepository
Persistência da auditoria de resets em
xls_resetar_powersync.
Não usa @JdbcRepository declarativo porque grava JSONB (stepsCompletados,
detalhes) e precisa interceptar SQLException com state 23505 na
constraint uq_xls_resetar_powersync_em_andamento para sinalizar lock (ResetarPowersyncAlreadyInProgressException — service remapeia para HTTP 409).
-
Constructor Summary
ConstructorsConstructorDescriptionResetarPowersyncRepository(io.micronaut.data.connection.ConnectionOperations<Connection> connectionOperations) Cria o repositório injetando o provedor de conexão JDBC usado nas queries de auditoria. -
Method Summary
Modifier and TypeMethodDescriptionvoidappendStepCompletado(long id, String step) Acrescenta um step à listasteps_completados(JSONB).voidatualizarAtividade(long id, String atividade) Atualiza a linha de "atividade atual" do reset — texto humano lido em tempo real pela tela/admin/resetar-powersync/{id}(polling) durante a execução.voidatualizarDetalhes(long id, String detalhesJson) Grava o documento JSONB de detalhes do reset.longcontar()Conta o total de resets registrados emxls_resetar_powersync.findById(long id) Busca um registro de reset pelo seu identificador.Insere uma row em statusEM_ANDAMENTO.io.micronaut.data.model.Page<ResetarPowersync> listarPaginado(io.micronaut.data.model.Pageable pageable) Página de resets ordenados poriniciado_emdecrescente; a ordenação dopageableé ignorada.voidmarcarErro(long id, LocalDateTime concluidoEm, long tempoMs, String stepAtual, String erroMensagem) Marca o reset como falho, registrando o step em que parou e a mensagem de erro.intmarcarOrfaosComoErro(LocalDateTime concluidoEm, String erroMensagem) Marca todos os resets emEM_ANDAMENTOcomoERRO.voidmarcarSucesso(long id, LocalDateTime concluidoEm, long tempoMs) Marca o reset como concluído com sucesso, gravando o instante de conclusão e a duração.
-
Constructor Details
-
ResetarPowersyncRepository
public ResetarPowersyncRepository(io.micronaut.data.connection.ConnectionOperations<Connection> connectionOperations) Cria o repositório injetando o provedor de conexão JDBC usado nas queries de auditoria.- Parameters:
connectionOperations- operações de conexão para participar da transação ativa do chamador.
-
-
Method Details
-
iniciar
Insere uma row em statusEM_ANDAMENTO. Se já existir outra em andamento, lançaResetarPowersyncAlreadyInProgressException(service remapeia para HTTP 409).- Parameters:
motivo- justificativa textual do reset, gravada na auditoria.iniciadoPor- identificação de quem disparou o reset.- Returns:
- o
ResetarPowersyncrecém-criado, comideiniciadoEmpreenchidos peloRETURNING.
-
findById
Busca um registro de reset pelo seu identificador.- Parameters:
id- identificador do reset emxls_resetar_powersync.- Returns:
- o
ResetarPowersynccorrespondente, ouOptional.empty()se não existir.
-
appendStepCompletado
Acrescenta um step à listasteps_completados(JSONB). Implementado via concatenação JSONB.- Parameters:
id- identificador do reset a atualizar.step- nome do step concluído a anexar à lista.
-
atualizarDetalhes
Grava o documento JSONB de detalhes do reset.- Parameters:
id- identificador do reset a atualizar.detalhesJson- conteúdo JSON a gravar na colunadetalhes.
-
atualizarAtividade
Atualiza a linha de "atividade atual" do reset — texto humano lido em tempo real pela tela/admin/resetar-powersync/{id}(polling) durante a execução.- Parameters:
id- identificador do reset a atualizar.atividade- texto descritivo do passo/ação em andamento.
-
marcarSucesso
Marca o reset como concluído com sucesso, gravando o instante de conclusão e a duração.- Parameters:
id- identificador do reset a atualizar.concluidoEm- instante em que o reset foi concluído.tempoMs- duração total do reset em milissegundos.
-
marcarOrfaosComoErro
Marca todos os resets emEM_ANDAMENTOcomoERRO. Único uso esperado: recovery de startup (StartupRecoveryService). Se a JVM morreu no meio do pipeline (deploy, crash, OOM), as rows ficam órfãs — sem ninguém pra atualizar — e a partial unique index bloqueia novos resets. Esta query desbloqueia o sistema.A query é segura por construção: o partial unique index
uq_xls_resetar_powersync_em_andamentogarante no máximo 1 row nesse estado, mas o UPDATE em massa funciona pra qualquer quantidade. Em produção, o resultado típico é 0 ou 1 row afetada.- Parameters:
concluidoEm- instante a gravar como conclusão (geralmenteNOW()).erroMensagem- mensagem a gravar noerro_mensagemdas rows afetadas.- Returns:
- número de rows marcadas como
ERRO.
-
marcarErro
public void marcarErro(long id, LocalDateTime concluidoEm, long tempoMs, String stepAtual, String erroMensagem) Marca o reset como falho, registrando o step em que parou e a mensagem de erro.- Parameters:
id- identificador do reset a atualizar.concluidoEm- instante em que o reset foi interrompido.tempoMs- duração decorrida até a falha, em milissegundos.stepAtual- step em que o reset estava quando falhou.erroMensagem- mensagem descritiva do erro.
-
listarPaginado
public io.micronaut.data.model.Page<ResetarPowersync> listarPaginado(io.micronaut.data.model.Pageable pageable) Página de resets ordenados poriniciado_emdecrescente; a ordenação dopageableé ignorada.- Parameters:
pageable- página e tamanho pedidos.- Returns:
- a página de
ResetarPowersync(possivelmente vazia), com o total registrado.
-
contar
public long contar()Conta o total de resets registrados emxls_resetar_powersync.- Returns:
- número total de registros de reset.
-