Class ResetarPowersyncRepository

java.lang.Object
br.com.vantroba.bi.transporte.powersync.ResetarPowersyncRepository

@Singleton public class ResetarPowersyncRepository extends Object
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 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

      public ResetarPowersync iniciar(String motivo, String iniciadoPor)
      Insere uma row em status EM_ANDAMENTO. Se já existir outra em andamento, lança ResetarPowersyncAlreadyInProgressException (service remapeia para HTTP 409).
      Parameters:
      motivo - justificativa textual do reset, gravada na auditoria.
      iniciadoPor - identificação de quem disparou o reset.
      Returns:
      o ResetarPowersync recém-criado, com id e iniciadoEm preenchidos pelo RETURNING.
    • findById

      public Optional<ResetarPowersync> findById(long id)
      Busca um registro de reset pelo seu identificador.
      Parameters:
      id - identificador do reset em xls_resetar_powersync.
      Returns:
      o ResetarPowersync correspondente, ou Optional.empty() se não existir.
    • appendStepCompletado

      public void appendStepCompletado(long id, String step)
      Acrescenta um step à lista steps_completados (JSONB). Implementado via concatenação JSONB.
      Parameters:
      id - identificador do reset a atualizar.
      step - nome do step concluído a anexar à lista.
    • atualizarDetalhes

      public void atualizarDetalhes(long id, String detalhesJson)
      Grava o documento JSONB de detalhes do reset.
      Parameters:
      id - identificador do reset a atualizar.
      detalhesJson - conteúdo JSON a gravar na coluna detalhes.
    • atualizarAtividade

      public void atualizarAtividade(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.
      Parameters:
      id - identificador do reset a atualizar.
      atividade - texto descritivo do passo/ação em andamento.
    • marcarSucesso

      public void marcarSucesso(long id, LocalDateTime concluidoEm, long tempoMs)
      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

      public int marcarOrfaosComoErro(LocalDateTime concluidoEm, String erroMensagem)
      Marca todos os resets em EM_ANDAMENTO como ERRO. Ú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_andamento garante 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 (geralmente NOW()).
      erroMensagem - mensagem a gravar no erro_mensagem das 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 por iniciado_em decrescente; a ordenação do pageable é 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 em xls_resetar_powersync.
      Returns:
      número total de registros de reset.