From 724c2ca3b83fbb53431a9aa5ecc988986cfea379 Mon Sep 17 00:00:00 2001 From: Grigorii Date: Mon, 9 Jan 2023 16:34:06 +0400 Subject: [PATCH] Add variants selecting --- .../touchin/roboswag/cart_utils/models/CartModel.kt | 4 +++- .../roboswag/cart_utils/models/ProductModel.kt | 5 +++++ .../cart_utils/repositories/LocalCartRepository.kt | 13 +++++++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) 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 5f44d83..baa8ed5 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 @@ -20,7 +20,9 @@ abstract class CartModel { fun getPriceWithPromocode(): Int = promocodeList .sortedByDescending { it.discount is PromocodeDiscount.ByPercent } - .fold(initial = totalPrice) { price, promo -> promo.discount.applyTo(price) } + .fold(initial = totalPrice) { price, promo -> + promo.discount.applyTo(price) + } abstract fun copyWith( products: List = this.products, 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 d825a80..56c2758 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 @@ -8,11 +8,16 @@ abstract class ProductModel { abstract val isDeleted: Boolean open val bonuses: Int? = null + open val variants: List = emptyList() + open val selectedVariantId: Int? = null + + val selectedVariant get() = variants.find { it.id == selectedVariantId } abstract fun copyWith( countInCart: Int = this.countInCart, isDeleted: Boolean = this.isDeleted, + selectedVariantId: Int? = this.selectedVariantId ): TProduct @Suppress("UNCHECKED_CAST") 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 7183514..9746e47 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 @@ -64,6 +64,19 @@ class LocalCartRepository, TProduct : ProductModel>( _currentCart.update { it.copyWith(usedBonuses = bonuses) } } + fun chooseVariant(productId: Int, variantId: Int?) { + updateCartProducts { + updateProduct(productId) { + if (variantId != null) { + check(variants.any { it.id == variantId }) { + "Product with id=$productId doesn't have variant with id=$variantId" + } + } + copyWith(selectedVariantId = variantId) + } + } + } + private fun updateCartProducts(updateAction: MutableList.() -> Unit) { _currentCart.update { cart -> cart.copyWith(products = cart.products.toMutableList().apply(updateAction))