mirror of
https://github.com/InsanusMokrassar/MicroUtils.git
synced 2025-09-04 07:39:52 +00:00
fix transactions dsl
This commit is contained in:
@@ -2,7 +2,7 @@ package dev.inmo.micro_utils.transactions
|
|||||||
|
|
||||||
typealias TransactionDSLRollbackLambda = suspend (Throwable) -> Unit
|
typealias TransactionDSLRollbackLambda = suspend (Throwable) -> Unit
|
||||||
class TransactionsDSL internal constructor() {
|
class TransactionsDSL internal constructor() {
|
||||||
internal val rollbackActions = LinkedHashSet<TransactionDSLRollbackLambda>()
|
internal val rollbackActions = ArrayList<TransactionDSLRollbackLambda>()
|
||||||
|
|
||||||
internal fun addRollbackAction(rollbackAction: TransactionDSLRollbackLambda) {
|
internal fun addRollbackAction(rollbackAction: TransactionDSLRollbackLambda) {
|
||||||
rollbackActions.add(rollbackAction)
|
rollbackActions.add(rollbackAction)
|
||||||
@@ -71,9 +71,10 @@ suspend fun <T> doSuspendTransaction(
|
|||||||
return runCatching {
|
return runCatching {
|
||||||
transactionsDSL.block()
|
transactionsDSL.block()
|
||||||
}.onFailure { e ->
|
}.onFailure { e ->
|
||||||
transactionsDSL.rollbackActions.reversed().forEach {
|
for (i in transactionsDSL.rollbackActions.lastIndex downTo 0) {
|
||||||
|
val rollbackAction = transactionsDSL.rollbackActions[i]
|
||||||
runCatching {
|
runCatching {
|
||||||
it.invoke(e)
|
rollbackAction.invoke(e)
|
||||||
}.onFailure { ee ->
|
}.onFailure { ee ->
|
||||||
onRollbackStepError(ee)
|
onRollbackStepError(ee)
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user