Dúvida sobre o PanacheQuery e o padrão DTO (Quarkus)

  • Tô usando classes de DTO para retornar e receber requisições no meu endpoint.
  • No método de retornar todo mundo, queria colocar uma paginação nele, para isso seria necessário retornar um PanacheQuery ao invés de uma List.
  • Porém, precisaria fazer a conversão de uma PanacheQuery que guarda as entidades, para uma outra PanacheQuery que teria os objetos de DTO.
  • Entretanto, para fazer essa conversão, preciso passar o mesmo para uma Stream (para usar o método map), e depois passar novamente para um PanacheQuery.
  • Não encontrei nada a respeito de como passar uma Stream ou mesmo uma List para PanacheQuery, e minha dúvida é exatamente essa.

Nunca usei esse negocio de PanacheQuery, mas se a consulta já vier com os dados paginados, vc não consegue pegar as entidades e fazer a conversão para DTO não?

Para facilitar, posta ai como o endpoint está implementado (é uma API Rest mesmo?).

A consulta não vem com os dados paginados, tem que fazer isso meio que manual. Porém, o problema não é esse. O problema é que, para fazer essa conversão, eu teria primeiro que passar o PanacheQuery para uma Stream (isso é possível), usar o método map, e depois passar a Stream para PanacheQuery novamente (até onde eu vi, não achei nada sobre de como fazer isso).

Método de listar todos do service:

public List<ProductResponse> findAll() {
		
		PanacheQuery<Product> allEntities = productRepository.findAll();
				
		return allEntities.list()
				.stream()
				.map(product -> modelMapper.map(product, ProductResponse.class))
				.collect(Collectors.toList());
		
	}

Listar todos do controller/resources:

@GET
@Produces(MediaType.APPLICATION_JSON)
public Response findAll() {
	return Response.ok(productService.findAll()).build();
}

Por hora, estou usando uma List normal mesmo.

Pelo retorno no seu controller ser um “application/json”, acredito que da forma como está fazendo está correto. Não vejo razão para retornar um panachequery em vez de list. Só para entender melhor, qual a necessidade de retornar um panache query como json?

É pq com o PanacheQuery eu poderia adicionar paginação, com a List não.

1 curtida

Foi mal, acho que to entendendo melhor. Esse PanacheQuery deve funcionar como o Pageable do Spring.

Estranho, pq realmente não tem menhum metodo na javadoc que permite criar um PanacheQuery. Vou ver se acho algo e posto um exemplo se encontrar.


Mas pelo que to lendo, o panache é de uso específico da camada de persistência. Não vi nenhuma referência dele ser usado na camada de controller. Talvez seja por isso que vc (nem eu) esteja conseguindo encontrar exemplo para esse cenário.

1 curtida

Sim mano, vou ver outras formas aqui de usar paginação.