I have situation where I can't update column at database.
The problem is that only method setIsPurchased
is executed and the flag is_purchase
at SQL table changed to true, but the next line with setPurchasedDate
which has to set current time is not executed. The response from database is Mono<Void>
type.
fun purchase(uuid: UUID, request: PurchaseInternalRequest) =
extraProductTransactionService.findTransactionByUuid(uuid)
.doOnNext { it.validateNotPurchased() }
.flatMap { purchaseViaSupplier(it, request) }
.flatMap { extraProductTransactionService.setIsPurchased(uuid) }
.flatMap { extraProductTransactionService.setPurchasedDate(uuid) }
.onErrorMap(Exception::class.java) { Exception(it.status) }
.then()
Queries for those two method are simple and looks like:
For setIsPurchased
:
update extra_product_transactions SET is_purchased = 1 where uuid = :uuid
For setPurchasedDate
:
update extra_product_transactions SET purchased_date = CURRENT_TIMESTAMP where uuid = :uuid
A Mono<Void>
by essence never emits an element onNext()
. Having said that, .flatMap { extraProductTransactionService.setPurchasedDate(uuid) }
is never invoked.
I assume you are not interested in the return values of the set
methods so you can do something like:
fun purchase(uuid: UUID, request: PurchaseInternalRequest) =
extraProductTransactionService.findTransactionByUuid(uuid)
.doOnNext { it.validateNotPurchased() }
.flatMap { purchaseViaSupplier(it, request) }
.flatMap {
extraProductTransactionService.setIsPurchased(uuid).subscribe()
extraProductTransactionService.setPurchasedDate(uuid)
}
.onErrorMap(Exception::class.java) { Exception(it.status) }
.then()