ursus
02/13/2020, 2:44 AMfun resetService(service: Service, usage: Usage): Single<Foo> =
getSubscriber()
.map { it.subscriber }
.flatMap { subscriber ->
Single
.fromCallable {
val credit = usage.credit ?: 0.0
if (subscriber.type == Type.CREDIT && creditAmount < service.resetPrice) {
throw InsufficientCreditException(creditAmount, service.resetPrice)
}
val product = getProduct(cache, service.productId)
val usageManagement = product?.usageManagement ?: error("UsageManagent is null")
val resetProductId = product.resetProductIdOverride ?: usageManagement.resetProductId
tupleOf(usageManagement.action, resetProductId)
}
.doOnSuccess {
store.setProcessingSubscriber(subscriber.id, isProcessing = true)
}
.flatMap { (action, resetProductId) ->
setService(action, resetProductId, null, null, null, null)
}
.doOnErrorOrCancel {
store.setProcessingSubscriber(subscriber.id, isProcessing = false)
}
}
.doOnSuccess { updateManager.enqueueUpdate() }
pg
02/25/2020, 6:37 AMursus
02/26/2020, 3:47 AMpg
02/26/2020, 9:22 AMursus
02/26/2020, 8:47 PM