Czołem :)
Napisałem w Project Reactor prostą metodę, której zadaniem jest dezaktywacja osób w bazie Cassandry.
Jeżeli osoba o podanym peselu istnieje + jest aktywna -> zmiana flagi -> update -> zwracamy wiadomość "Sukces"
Jeżeli osoba istnieje + nie jest aktywna -> zwracamy wiadomość "Do bani!"
Od kilku dni staram się znaleźć błąd w kodzie:
@Override
private Mono<String> deactivateUser(String pesel) {
return Mono.just(pesel)
.flatMap(repository::findById)
.filter(PersonEntity::getActive)
.map(entity -> {
entity.setActive(false);
return entity;
})
.flatMap(entity -> repository.save(entity)
.flatMap(entity1 -> Mono.just("Sukces"))
)
.defaultIfEmpty("Do bani!")
.doOnNext(System.out::println);
}
Otóż gdy wywołuje:
String pesel = "123456";
testInsert(pesel); // osoba metoda do wstawiania rekordu , woła subscribe na końcu
deactivateUser(pesel).subscribe();
deactivateUser(pesel).subscribe();
W pierwszym deactivate
powinno wyświetlić się "Sukces" (jest) a w drugim "Do bani!" a jest "Sukces".
Pytanie - dlaczego tak się dzieje?
Co ciekawe gdy wtryniłem .doOnNext(System.out::println)
po operacji findById
to w drugim wywołaniu pokazuje mi usera sprzed update. Czemu?
Z góry serdecznie dzięki za pomoc!