Назад к задачам
Junior — Middle+
27

Анализ и рефакторинг существующего UseCase‑класса

Компании, где спрашивали:

ЯндексЯндекс
Получайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Условие задачи

В проекте присутствует реализация UseCase, написанная другим разработчиком. Требуется разобраться, какую бизнес‑логику реализует данный код, и провести его улучшение, сделав структуру более понятной и поддерживаемой.

class MainUseCase @Inject constructor(
    private val firstUseCase: FirstUseCase,
    private val secondUseCase: SecondUseCase
) {

    @CheckResult
    fun execute(result: Result): Completable {
        val orderedItems = result.items
        return if (orderedItems.isEmpty()) {
            Completable.complete()
        } else {
            firstUseCase.getCartItems()
                .map { cartItems ->
                    orderedItems.mapNotNull { orderItem ->
                        cartItems.firstOrNull { it.id == orderItem.id }
                    }
                }
                .map { cartItem ->
                    CartItemId(
                        cartItemId = cartItem.id,
                        skuId = cartItem.skuId,
                        bundleId = cartItem.bundleId,
                        isPrimaryBundleItem = cartItem.isPrimaryBundleItem
                    )
                }
                .flatMapCompletable {
                    if (it.isEmpty()) {
                        Completable.complete()
                    } else {
                        secondUseCase.deleteItems(it)
                    }
                }
        }
    }
}