diff --git a/cart-utils/src/main/java/ru/touchin/roboswag/cart_utils/models/CartModel.kt b/cart-utils/src/main/java/ru/touchin/roboswag/cart_utils/models/CartModel.kt index c6c84ff..5f44d83 100644 --- a/cart-utils/src/main/java/ru/touchin/roboswag/cart_utils/models/CartModel.kt +++ b/cart-utils/src/main/java/ru/touchin/roboswag/cart_utils/models/CartModel.kt @@ -6,20 +6,26 @@ abstract class CartModel { open val promocodeList: List = emptyList() + open val availableBonuses: Int = 0 + open val usedBonuses: Int = 0 + val availableProducts: List get() = products.filter { it.isAvailable && !it.isDeleted } val totalPrice: Int get() = availableProducts.sumOf { it.countInCart * it.price } - val priceWithPromocode: Int - get() = promocodeList - .sortedByDescending { it.discount is PromocodeDiscount.ByPercent } - .fold(initial = totalPrice) { price, promo -> promo.discount.applyTo(price) } + val totalBonuses: Int + get() = availableProducts.sumOf { it.countInCart * (it.bonuses ?: 0) } + + fun getPriceWithPromocode(): Int = promocodeList + .sortedByDescending { it.discount is PromocodeDiscount.ByPercent } + .fold(initial = totalPrice) { price, promo -> promo.discount.applyTo(price) } abstract fun copyWith( products: List = this.products, - promocodeList: List = this.promocodeList + promocodeList: List = this.promocodeList, + usedBonuses: Int = this.usedBonuses ): TCart @Suppress("UNCHECKED_CAST") diff --git a/cart-utils/src/main/java/ru/touchin/roboswag/cart_utils/models/ProductModel.kt b/cart-utils/src/main/java/ru/touchin/roboswag/cart_utils/models/ProductModel.kt index 56e192b..d825a80 100644 --- a/cart-utils/src/main/java/ru/touchin/roboswag/cart_utils/models/ProductModel.kt +++ b/cart-utils/src/main/java/ru/touchin/roboswag/cart_utils/models/ProductModel.kt @@ -7,6 +7,7 @@ abstract class ProductModel { abstract val isAvailable: Boolean abstract val isDeleted: Boolean + open val bonuses: Int? = null open val variants: List = emptyList() abstract fun copyWith( diff --git a/cart-utils/src/main/java/ru/touchin/roboswag/cart_utils/repositories/LocalCartRepository.kt b/cart-utils/src/main/java/ru/touchin/roboswag/cart_utils/repositories/LocalCartRepository.kt index 8e861b5..7183514 100644 --- a/cart-utils/src/main/java/ru/touchin/roboswag/cart_utils/repositories/LocalCartRepository.kt +++ b/cart-utils/src/main/java/ru/touchin/roboswag/cart_utils/repositories/LocalCartRepository.kt @@ -59,6 +59,11 @@ class LocalCartRepository, TProduct : ProductModel>( updatePromocodeList { removeAt(indexOfFirst { it.code == code }) } } + fun useBonuses(bonuses: Int) { + require(currentCart.value.availableBonuses >= bonuses) { "Can't use bonuses more than available" } + _currentCart.update { it.copyWith(usedBonuses = bonuses) } + } + private fun updateCartProducts(updateAction: MutableList.() -> Unit) { _currentCart.update { cart -> cart.copyWith(products = cart.products.toMutableList().apply(updateAction)) diff --git a/cart-utils/src/main/java/ru/touchin/roboswag/cart_utils/update_manager/CartUpdateManager.kt b/cart-utils/src/main/java/ru/touchin/roboswag/cart_utils/update_manager/CartUpdateManager.kt index 57b7e6c..8a68bac 100644 --- a/cart-utils/src/main/java/ru/touchin/roboswag/cart_utils/update_manager/CartUpdateManager.kt +++ b/cart-utils/src/main/java/ru/touchin/roboswag/cart_utils/update_manager/CartUpdateManager.kt @@ -5,7 +5,6 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.SupervisorJob import ru.touchin.roboswag.cart_utils.models.CartModel import ru.touchin.roboswag.cart_utils.models.ProductModel -import ru.touchin.roboswag.cart_utils.models.PromocodeModel import ru.touchin.roboswag.cart_utils.repositories.IRemoteCartRepository import ru.touchin.roboswag.cart_utils.repositories.LocalCartRepository import ru.touchin.roboswag.cart_utils.requests_qeue.Request @@ -74,18 +73,6 @@ open class CartUpdateManager, TProduct : ProductMode } } - open fun completelyDeleteProduct(id: Int) { - localCartRepository.removeProduct(id) - } - - open fun applyPromocode(promocode: PromocodeModel) { - localCartRepository.applyPromocode(promocode) - } - - open fun removePromocode(code: String) { - localCartRepository.removePromocode(code) - } - private suspend fun tryToGetRemoteCartAgain() { repeat(maxRequestAttemptsCount) { runCatching {