kamiazya/scopes

Add Konsist rule to ensure TransactionManager rollback on Either.Left

开放

#182 创建于 2025年9月2日

 (1 条评论) (0 个反应) (0 位负责人)Kotlin (3 个派生)auto 404
hacktoberfest

仓库指标

星标
 (2 个星标)
PR 合并指标
 (PR 指标待抓取)

描述

Context

Currently, TransactionManagerAdapter delegates blindly to the platform TransactionManager. When a transactional block returns Either.Left (indicating an error), the transaction is not automatically rolled back.

Problem

This can lead to partial commits when operations fail, violating transactional consistency.

Suggested Solution

  1. Update TransactionManagerAdapter to mark transactions for rollback when the block returns Either.Left:
override suspend fun <E, T> inTransaction(block: suspend () -> Either<E, T>): Either<E, T> =
    platformTransactionManager.inTransaction {
        val result = block()
        if (result.isLeft()) markForRollback()
        result
    }
  1. Add a Konsist test to ensure all TransactionManager implementations follow this pattern

  2. Add integration tests to verify rollback behavior

Benefits

  • Ensures transactional consistency
  • Prevents partial commits on errors
  • Makes error handling more predictable

Related

  • PR #165 (Context View feature)
  • TransactionManagementTest.kt
  • Suggested by AI review

贡献者指南