Таким образом, контекст заключается в том, что мне требуется обновить значение в одном документе, у меня есть Mono , параметр Object содержит значения, такие как username (чтобы найти правильного пользователя по уникальному имени пользователя) и сумма значение.
Проблема в том, что это значение (из-за других компонентов моего приложения) является значением, на которое мне нужно увеличивать / уменьшать баланс пользователей, а не пропускать новый баланс. Я намереваюсь сделать это, используя два Monos , где один находит пользователя, затем это объединяется с другим Mono с входящим запросом, где я могу затем выполнить простую сумму (т.е. баланс + changeRequest .amount), затем верните его в базу данных документов.
override fun increaseBalance(changeRequest: Mono<ChangeBalanceRequestResource>): Mono<ChangeBalanceResponse> {
val changeAmount: Mono<Decimal128> = changeRequest.map { it.transactionAmount }
val user: Mono<User> = changeRequest.flatMap { rxUserRepository.findByUsername(it.username)
val newBalace = user.map {
val r = changeAmount.block()
it.balance = sumBalance(it.balance!!, r!!)
rxUserRepository.save(it)
}
.flatMap { it }
.map { it.balance!! }
return Mono.just(ChangeBalanceResponse("success", newBalace.block()!!))
}
Очевидно, я пытаюсь добиться этого неблокирующим образом. Я также открыт для использования только одного Mono, если это возможно / оптимально. Я также ценю, что я действительно разбил пример и использовал .block в качестве заполнителя для иллюстрации того, чего я пытаюсь достичь.
PS Это мой первый пост, поэтому любые советы о том, как express мой Прояснение проблемы было бы полезно.