Я изучаю реактивное программирование с помощью Reactor и хочу реализовать сценарий регистрации, в котором у пользователя может быть несколько учетных записей, назначенных одному и тому же профилю. Однако имя пользователя, назначенное профилю, и телефон, назначенный учетной записи, должны быть уникальными.
Как вы можете увидеть в следующем фрагменте, этот сценарий будет легко реализовать, если Reactor предложит оператор switchIfNotEmpty
.
public Mono<PersonalAccountResponse> createPersonalAccount(PersonalAccountRequest request) {
return Mono
.just(request.isAlreadyUser())
.flatMap(isAlreadyUser -> {
if(isAlreadyUser){
return profileDao
.findByUsername(request.getUsername()) //
.switchIfEmpty(Mono.error(() -> new IllegalArgumentException("...")));
}else{
return profileDao
.findByUsername(request.getUsername())
.switchIfEmpty(Mono.from(profileDao.save(profileData)))
.switchIfNotEmpty(Mono.error(() -> new IllegalArgumentException("...")));
}
})
.map(profileData -> personalAccountMapper.toData(request))
.flatMap(accountData -> personalAccountDao
.retrieveByMobile(request.getMobileNumber())
.switchIfEmpty(Mono.from(personalAccountDao.save(accountData)))
.switchIfNotEmpty(Mono.error(() -> new IllegalArgumentException("..."))))
.map(data -> personalAccountMapper.toResponse(data, request.getUsername()));
}
Как я могу реализовать это требование без switchIfNotEmpty
?
Спасибо