update
Service
Usaremos o flatmap! Ele nos permite um merge, transformando uma ou mais streams em uma nova stream.
Antes
@Transactional
public UserDTO update(String id, UserDTO dto) {
User entity = repository.findById(id)
.orElseThrow(() -> new ResourceNotFoundException("Recurso não encontrado"));
copyDtoToEntity(dto, entity);
entity = repository.save(entity);
return new UserDTO(entity);
}Depois
public Mono<UserDTO> update(String id, UserDTO dto) {
return repository.findById(id)
.flatMap(exinstingUser -> {
//modificamos os dados do User que está no banco
exinstingUser.setName(dto.getName());
exinstingUser.setEmail(dto.getEmail());
return repository.save(exinstingUser);
})
//transformamos por fim em um Mono de UserDTO.
.map(UserDTO::new)
.switchIfEmpty(Mono.error(new ResourceNotFoundException("Recurso não encontrado")));
}Controller
Antes
Depois
Atualizado