Java Reactor и Cassandra - обновление выполняется без эффектов базы данных - PullRequest
0 голосов
/ 12 октября 2018

Я начинаю исследовать реактивный мир.В своем микросервисном проекте я использую Project Reactor и реактивный репозиторий Cassandra.

Я написал простой метод обработчика DELETE: я получаю пользователя по идентификатору, проверим, является ли он DELETED (фильтр по статусу) и:

  • , если он помечен как DELETEDзатем верните notFound() (не можете удалить пользователя, помеченного DELETED)
  • в противном случае: пометьте его как DELETED и обновите объект

Проблема в том, что обновление не является базой данныхизменить (даже если метод в хранилище был выполнен).Что может вызвать такое странное поведение?

Вот мой код:

@Override
public Mono<ServerResponse> handle(ServerRequest serverRequest) {
    String userId = serverRequest.pathVariable(PATH_PARAM_ID);
    return Mono.just(userId)
            .map(casandraRepository::findById)
            .flatMap(detailsMono -> detailsMono.filter(details -> !details.getDeleted()))
            .map(this::getResponsePayload)
            .defaultIfEmpty(notFound().build())
            .flatMap(serverResponseMono -> serverResponseMono);
}

private Mono<ServerResponse> getResponsePayload(User details){
    User markedDetails = details.toBuilder().deleted(Boolean.TRUE).build();
    casandraRepository.save(markedDetails);
    return noContent().build();
}
...