У меня есть реактивное приложение с пружинной загрузкой.Где я хочу реализовать, чтобы создать пользователя, если он еще не существует.Вот так:
fun userAlreadyExist() = Mono.error<UserDTO>(UsernameAlreadyExistException())
fun create(userDTO: Mono<UserDTO>): Mono<Void> {
return userDTO.filter { userRepository.existsByNameIgnoreCase(it.username).block() == false }
.switchIfEmpty(userAlreadyExist())
.flatMap { createNewUser(it).then() }
Что мне действительно не нравится, так это то, что мне нужно использовать .block()
внутри фильтра.Есть лучший способ сделать это?
Большой проблемой является циклическая зависимость, которая есть у обоих, поскольку UserRepository
необходимо знать имя пользователя, а поток userDTO должен знать, существует ли оно уже и возвращает моно.