delete
Service
Antes
@Transactional
public void delete(String id) {
User entity = repository.findById(id)
.orElseThrow(() -> new ResourceNotFoundException("Recurso não encontrado"));
repository.delete(entity);
}
Depois
public Mono<Void> delete(String id) {
//verificamos se o User existe
//se ele não existir, lançará a exception
return repository.findById(id)
.switchIfEmpty(Mono.error(new ResourceNotFoundException("Recurso não encontrado")))
//se ele existir, ele vai retornar um Mono de User
//iremos transformar esse Mono de User em Void para deletar
//o usuário
.flatMap(existingUser -> repository.delete(existingUser));
}
Controller
Antes
@DeleteMapping(value = "/{id}")
public ResponseEntity<Void> delete(@PathVariable String id) {
service.delete(id);
return ResponseEntity.noContent().build();
}
Depois
O then retorna um void, que é o que precisamos.
@DeleteMapping(value = "/{id}")
public Mono<ResponseEntity<Void>> delete(@PathVariable String id) {
return service.delete(id).then(Mono.just(ResponseEntity.noContent().build()));
}
Atualizado