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