从数据库更新 webclient 响应
Updating webclient response from database
我遇到无法更新数据库列的情况。
问题是只执行方法 setIsPurchased
并且 SQL table 处的标志 is_purchase
更改为 true,但下一行 setPurchasedDate
必须设置当前时间不执行。来自数据库的响应是 Mono<Void>
类型。
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()
这两种方法的查询很简单,如下所示:
对于setIsPurchased
:
update extra_product_transactions SET is_purchased = 1 where uuid = :uuid
对于setPurchasedDate
:
update extra_product_transactions SET purchased_date = CURRENT_TIMESTAMP where uuid = :uuid
A Mono<Void>
本质上永远不会发出元素 onNext()
。话虽如此,.flatMap { extraProductTransactionService.setPurchasedDate(uuid) }
永远不会被调用。
我假设您对 set
方法的 return 值不感兴趣,因此您可以执行以下操作:
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()
我遇到无法更新数据库列的情况。
问题是只执行方法 setIsPurchased
并且 SQL table 处的标志 is_purchase
更改为 true,但下一行 setPurchasedDate
必须设置当前时间不执行。来自数据库的响应是 Mono<Void>
类型。
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()
这两种方法的查询很简单,如下所示:
对于setIsPurchased
:
update extra_product_transactions SET is_purchased = 1 where uuid = :uuid
对于setPurchasedDate
:
update extra_product_transactions SET purchased_date = CURRENT_TIMESTAMP where uuid = :uuid
A Mono<Void>
本质上永远不会发出元素 onNext()
。话虽如此,.flatMap { extraProductTransactionService.setPurchasedDate(uuid) }
永远不会被调用。
我假设您对 set
方法的 return 值不感兴趣,因此您可以执行以下操作:
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()