Interface MensagemM2mRepository
- All Superinterfaces:
io.micronaut.data.repository.CrudRepository<MensagemM2m, Long>, io.micronaut.data.repository.GenericRepository<MensagemM2m, Long>
@JdbcRepository(dialect=POSTGRES)
public interface MensagemM2mRepository
extends io.micronaut.data.repository.CrudRepository<MensagemM2m, Long>
Repositório Data JDBC da
MensagemM2m. Dialeto Postgres — o dialeto de produção; o teste de
plataforma sobe Postgres real (Testcontainers), então o SQL gerado é exercitado tal como roda em
produção.-
Method Summary
Modifier and TypeMethodDescriptionlongdeleteByStatusInAndUpdatedAtLessThan(Collection<Status> status, Instant corte) Poda de retenção: remove os terminais de auditoria mais velhos que o corte.findByDirecaoAndStatusInAndTipoInAndTentativasLessThanOrderById(Direcao direcao, Collection<Status> status, Collection<String> tipo, int tentativas, io.micronaut.data.model.Pageable pageable) Candidatas ao despacho: saída pendente/em-erro abaixo do teto de tentativas, mais antigas primeiro, e SÓ dostipoque ESTE app sabe rotear (osEnviadorMensagemregistrados).Lista para a tela (mais recentes primeiro); filtro fino fica no controller (volume de admin).Methods inherited from interface io.micronaut.data.repository.CrudRepository
count, delete, deleteAll, deleteAll, deleteById, existsById, findAll, findById, insert, insertAll, save, saveAll, update, updateAll
-
Method Details
-
findByDirecaoAndStatusInAndTipoInAndTentativasLessThanOrderById
List<MensagemM2m> findByDirecaoAndStatusInAndTipoInAndTentativasLessThanOrderById(Direcao direcao, Collection<Status> status, Collection<String> tipo, int tentativas, io.micronaut.data.model.Pageable pageable) Candidatas ao despacho: saída pendente/em-erro abaixo do teto de tentativas, mais antigas primeiro, e SÓ dostipoque ESTE app sabe rotear (osEnviadorMensagemregistrados). Sem lock de linha (AT-LEAST-ONCE — dedup é do receptor).O filtro por
tipoé o que deixa N apps dividirem a MESMAmensagem_m2m(mesmo DB/schema) sem competir: cadaRelayM2mreivindica só o que consegue entregar. Sem ele, o relay do app "errado" pegava a linha de umtipoalheio, não roteava e QUEIMAVA a tentativa (dead-letter falso, quebrando o AT-LEAST-ONCE). Cadatipotem 1 remetente → o particionamento é não-ambíguo. Chamar só comtiposnão-vazio (o relay pula o tick se o app não registra nenhum enviador).- Parameters:
direcao- sempreDirecao.SAIDA.status- tipicamente[PENDENTE, ERRO].tipo- os tipos que este app roteia (RoteadorEnviadores.tiposRegistrados()).tentativas- teto exclusivo (linhas comtentativas <este valor).pageable- limite do lote por tick.- Returns:
- lote a despachar.
-
listarRecentes
Lista para a tela (mais recentes primeiro); filtro fino fica no controller (volume de admin). -
deleteByStatusInAndUpdatedAtLessThan
Poda de retenção: remove os terminais de auditoria mais velhos que o corte.PAUSADO/CANCELADOnunca entram aqui (retidos até o operador limpar).- Parameters:
status- tipicamente[ENVIADO, RECEBIDO].corte- instante-limite; linhas comupdatedAt <corte são removidas.- Returns:
- quantidade removida.
-