From 9cb0264556f346e0d1be2640eb644a41156ea965 Mon Sep 17 00:00:00 2001 From: Valeriy Date: Mon, 16 Dec 2024 17:54:48 +0300 Subject: [PATCH 1/5] feat: Added Get client's shopping cart Api Method into ProductsManager --- .../personalization/api/managers/ProductsManager.kt | 4 ++++ .../features/products/impl/ProductsManagerImpl.kt | 11 ++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/personalization-sdk/src/main/kotlin/com/personalization/api/managers/ProductsManager.kt b/personalization-sdk/src/main/kotlin/com/personalization/api/managers/ProductsManager.kt index 1709d8af..14d9165a 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/api/managers/ProductsManager.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/api/managers/ProductsManager.kt @@ -19,4 +19,8 @@ interface ProductsManager { itemId: String, listener: OnApiCallbackListener? ) + + fun getClientShoppingCart( + listener: OnApiCallbackListener? + ) } diff --git a/personalization-sdk/src/main/kotlin/com/personalization/features/products/impl/ProductsManagerImpl.kt b/personalization-sdk/src/main/kotlin/com/personalization/features/products/impl/ProductsManagerImpl.kt index 29450f4c..45a02ba7 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/features/products/impl/ProductsManagerImpl.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/features/products/impl/ProductsManagerImpl.kt @@ -4,8 +4,8 @@ import com.personalization.Params import com.personalization.api.OnApiCallbackListener import com.personalization.api.managers.ProductsManager import com.personalization.sdk.domain.usecases.network.SendNetworkMethodUseCase -import javax.inject.Inject import org.json.JSONObject +import javax.inject.Inject internal class ProductsManagerImpl @Inject constructor( private val sendNetworkMethodUseCase: SendNetworkMethodUseCase, @@ -49,6 +49,14 @@ internal class ProductsManagerImpl @Inject constructor( ) } + override fun getClientShoppingCart(listener: OnApiCallbackListener?) { + sendNetworkMethodUseCase.getAsync( + method = GET_CLIENT_SHOPPING_CART, + params = Params().build(), + listener = listener + ) + } + private fun Params.buildParams( itemId: String? = null, brands: String? = null, @@ -76,6 +84,7 @@ internal class ProductsManagerImpl @Inject constructor( companion object { const val GET_PRODUCT_LIST_REQUEST = "products" const val GET_PRODUCT_INFO_REQUEST = "products/get" + const val GET_CLIENT_SHOPPING_CART = "products/cart" private const val LIMIT_KEY = "limit" private const val PAGE_KEY = "page" From 28a0f29f482890ded7a2b5c86e2e41ae9fb72437 Mon Sep 17 00:00:00 2001 From: Valeriy Date: Tue, 17 Dec 2024 17:26:45 +0300 Subject: [PATCH 2/5] feat: Segregated working with cart into separate CartManager --- .../main/kotlin/com/personalization/SDK.kt | 4 ++++ .../api/managers/CartManager.kt | 10 ++++++++ .../api/managers/ProductsManager.kt | 4 ---- .../com/personalization/di/SdkModule.kt | 10 ++++++++ .../features/cart/CartManagerImpl.kt | 24 +++++++++++++++++++ .../products/impl/ProductsManagerImpl.kt | 9 ------- 6 files changed, 48 insertions(+), 13 deletions(-) create mode 100644 personalization-sdk/src/main/kotlin/com/personalization/api/managers/CartManager.kt create mode 100644 personalization-sdk/src/main/kotlin/com/personalization/features/cart/CartManagerImpl.kt diff --git a/personalization-sdk/src/main/kotlin/com/personalization/SDK.kt b/personalization-sdk/src/main/kotlin/com/personalization/SDK.kt index 15f97882..5a26bd6c 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/SDK.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/SDK.kt @@ -9,6 +9,7 @@ import com.google.firebase.messaging.RemoteMessage import com.personalization.Params.InternalParameter import com.personalization.Params.TrackEvent import com.personalization.api.OnApiCallbackListener +import com.personalization.api.managers.CartManager import com.personalization.api.managers.InAppNotificationManager import com.personalization.api.managers.ProductsManager import com.personalization.api.managers.RecommendationManager @@ -59,6 +60,9 @@ open class SDK { @Inject lateinit var productsManager: ProductsManager + @Inject + lateinit var cartManager: CartManager + @Inject lateinit var trackEventManager: TrackEventManager diff --git a/personalization-sdk/src/main/kotlin/com/personalization/api/managers/CartManager.kt b/personalization-sdk/src/main/kotlin/com/personalization/api/managers/CartManager.kt new file mode 100644 index 00000000..4297af0d --- /dev/null +++ b/personalization-sdk/src/main/kotlin/com/personalization/api/managers/CartManager.kt @@ -0,0 +1,10 @@ +package com.personalization.api.managers + +import com.personalization.api.OnApiCallbackListener + +interface CartManager { + + fun getClientShoppingCart( + listener: OnApiCallbackListener? + ) +} diff --git a/personalization-sdk/src/main/kotlin/com/personalization/api/managers/ProductsManager.kt b/personalization-sdk/src/main/kotlin/com/personalization/api/managers/ProductsManager.kt index 14d9165a..1709d8af 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/api/managers/ProductsManager.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/api/managers/ProductsManager.kt @@ -19,8 +19,4 @@ interface ProductsManager { itemId: String, listener: OnApiCallbackListener? ) - - fun getClientShoppingCart( - listener: OnApiCallbackListener? - ) } diff --git a/personalization-sdk/src/main/kotlin/com/personalization/di/SdkModule.kt b/personalization-sdk/src/main/kotlin/com/personalization/di/SdkModule.kt index 7abe68de..1af6b1ac 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/di/SdkModule.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/di/SdkModule.kt @@ -2,11 +2,13 @@ package com.personalization.di import android.content.Context import com.personalization.RegisterManager +import com.personalization.api.managers.CartManager import com.personalization.api.managers.InAppNotificationManager import com.personalization.api.managers.ProductsManager import com.personalization.api.managers.RecommendationManager import com.personalization.api.managers.SearchManager import com.personalization.api.managers.TrackEventManager +import com.personalization.features.cart.CartManagerImpl import com.personalization.features.inAppNotification.impl.InAppNotificationManagerImpl import com.personalization.features.notification.domain.data.NotificationDataExtractor import com.personalization.features.products.impl.ProductsManagerImpl @@ -65,6 +67,14 @@ class SdkModule { sendNetworkMethodUseCase = sendNetworkMethodUseCase ) + @Singleton + @Provides + fun provideCartManager( + sendNetworkMethodUseCase: SendNetworkMethodUseCase + ): CartManager = CartManagerImpl( + sendNetworkMethodUseCase = sendNetworkMethodUseCase + ) + @Singleton @Provides fun provideTrackEventManager( diff --git a/personalization-sdk/src/main/kotlin/com/personalization/features/cart/CartManagerImpl.kt b/personalization-sdk/src/main/kotlin/com/personalization/features/cart/CartManagerImpl.kt new file mode 100644 index 00000000..f117e338 --- /dev/null +++ b/personalization-sdk/src/main/kotlin/com/personalization/features/cart/CartManagerImpl.kt @@ -0,0 +1,24 @@ +package com.personalization.features.cart + +import com.personalization.Params +import com.personalization.api.OnApiCallbackListener +import com.personalization.api.managers.CartManager +import com.personalization.sdk.domain.usecases.network.SendNetworkMethodUseCase +import javax.inject.Inject + +internal class CartManagerImpl @Inject constructor( + private val sendNetworkMethodUseCase: SendNetworkMethodUseCase, +) : CartManager { + + override fun getClientShoppingCart(listener: OnApiCallbackListener?) { + sendNetworkMethodUseCase.getAsync( + method = GET_CLIENT_SHOPPING_CART, + params = Params().build(), + listener = listener + ) + } + + companion object { + const val GET_CLIENT_SHOPPING_CART = "products/cart" + } +} diff --git a/personalization-sdk/src/main/kotlin/com/personalization/features/products/impl/ProductsManagerImpl.kt b/personalization-sdk/src/main/kotlin/com/personalization/features/products/impl/ProductsManagerImpl.kt index 45a02ba7..8326edbd 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/features/products/impl/ProductsManagerImpl.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/features/products/impl/ProductsManagerImpl.kt @@ -49,14 +49,6 @@ internal class ProductsManagerImpl @Inject constructor( ) } - override fun getClientShoppingCart(listener: OnApiCallbackListener?) { - sendNetworkMethodUseCase.getAsync( - method = GET_CLIENT_SHOPPING_CART, - params = Params().build(), - listener = listener - ) - } - private fun Params.buildParams( itemId: String? = null, brands: String? = null, @@ -84,7 +76,6 @@ internal class ProductsManagerImpl @Inject constructor( companion object { const val GET_PRODUCT_LIST_REQUEST = "products" const val GET_PRODUCT_INFO_REQUEST = "products/get" - const val GET_CLIENT_SHOPPING_CART = "products/cart" private const val LIMIT_KEY = "limit" private const val PAGE_KEY = "page" From be12c79eff0f7b94284be98fbdec15622a66226b Mon Sep 17 00:00:00 2001 From: Valeriy Date: Wed, 18 Dec 2024 13:46:18 +0300 Subject: [PATCH 3/5] feat: Added CartContentResponse class and moved away from using OnApiCallbackListener in CartManager to using its own callbacks. --- .../api/managers/CartManager.kt | 15 ++++++++---- .../api/responses/cart/CartContent.kt | 7 ++++++ .../api/responses/cart/CartContentResponse.kt | 8 +++++++ .../api/responses/cart/CartItem.kt | 8 +++++++ .../features/cart/CartManagerImpl.kt | 24 +++++++++++++++++-- 5 files changed, 56 insertions(+), 6 deletions(-) create mode 100644 personalization-sdk/src/main/kotlin/com/personalization/api/responses/cart/CartContent.kt create mode 100644 personalization-sdk/src/main/kotlin/com/personalization/api/responses/cart/CartContentResponse.kt create mode 100644 personalization-sdk/src/main/kotlin/com/personalization/api/responses/cart/CartItem.kt diff --git a/personalization-sdk/src/main/kotlin/com/personalization/api/managers/CartManager.kt b/personalization-sdk/src/main/kotlin/com/personalization/api/managers/CartManager.kt index 4297af0d..e8733707 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/api/managers/CartManager.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/api/managers/CartManager.kt @@ -1,10 +1,17 @@ package com.personalization.api.managers -import com.personalization.api.OnApiCallbackListener +import com.personalization.api.responses.cart.CartContent interface CartManager { - fun getClientShoppingCart( - listener: OnApiCallbackListener? + /** + * Request client's shopping cart content + * + * @param onGetCartContent Callback for cart content + * @param onError Callback for error + */ + fun getClientShoppingCartContent( + onGetCartContent: (CartContent) -> Unit, + onError: (code: Int, msg: String?) -> Unit = { _: Int, _: String? -> } ) -} +} \ No newline at end of file diff --git a/personalization-sdk/src/main/kotlin/com/personalization/api/responses/cart/CartContent.kt b/personalization-sdk/src/main/kotlin/com/personalization/api/responses/cart/CartContent.kt new file mode 100644 index 00000000..bdbba19e --- /dev/null +++ b/personalization-sdk/src/main/kotlin/com/personalization/api/responses/cart/CartContent.kt @@ -0,0 +1,7 @@ +package com.personalization.api.responses.cart + +import com.google.gson.annotations.SerializedName + +data class CartContent( + @SerializedName("items") val content: List +) diff --git a/personalization-sdk/src/main/kotlin/com/personalization/api/responses/cart/CartContentResponse.kt b/personalization-sdk/src/main/kotlin/com/personalization/api/responses/cart/CartContentResponse.kt new file mode 100644 index 00000000..c817e974 --- /dev/null +++ b/personalization-sdk/src/main/kotlin/com/personalization/api/responses/cart/CartContentResponse.kt @@ -0,0 +1,8 @@ +package com.personalization.api.responses.cart + +import com.google.gson.annotations.SerializedName + +data class CartContentResponse( + @SerializedName("status") val status: String, + @SerializedName("data") val cartContent: CartContent +) diff --git a/personalization-sdk/src/main/kotlin/com/personalization/api/responses/cart/CartItem.kt b/personalization-sdk/src/main/kotlin/com/personalization/api/responses/cart/CartItem.kt new file mode 100644 index 00000000..7aaaa94b --- /dev/null +++ b/personalization-sdk/src/main/kotlin/com/personalization/api/responses/cart/CartItem.kt @@ -0,0 +1,8 @@ +package com.personalization.api.responses.cart + +import com.google.gson.annotations.SerializedName + +data class CartItem( + @SerializedName("uniqid") val id: String, + @SerializedName("quantity") val quantity: Int +) diff --git a/personalization-sdk/src/main/kotlin/com/personalization/features/cart/CartManagerImpl.kt b/personalization-sdk/src/main/kotlin/com/personalization/features/cart/CartManagerImpl.kt index f117e338..f2db1da0 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/features/cart/CartManagerImpl.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/features/cart/CartManagerImpl.kt @@ -1,20 +1,40 @@ package com.personalization.features.cart +import com.google.gson.Gson import com.personalization.Params import com.personalization.api.OnApiCallbackListener import com.personalization.api.managers.CartManager +import com.personalization.api.responses.cart.CartContent +import com.personalization.api.responses.cart.CartContentResponse import com.personalization.sdk.domain.usecases.network.SendNetworkMethodUseCase +import org.json.JSONObject import javax.inject.Inject internal class CartManagerImpl @Inject constructor( private val sendNetworkMethodUseCase: SendNetworkMethodUseCase, ) : CartManager { - override fun getClientShoppingCart(listener: OnApiCallbackListener?) { + override fun getClientShoppingCartContent( + onGetCartContent: (CartContent) -> Unit, + onError: (code: Int, msg: String?) -> Unit + ) { sendNetworkMethodUseCase.getAsync( method = GET_CLIENT_SHOPPING_CART, params = Params().build(), - listener = listener + listener = object : OnApiCallbackListener() { + override fun onSuccess(response: JSONObject?) { + response?.let { + val cartContentResponse = Gson().fromJson( + it.toString(), CartContentResponse::class.java + ) + onGetCartContent(cartContentResponse.cartContent) + } + } + + override fun onError(code: Int, msg: String?) { + onError(code, msg) + } + } ) } From a536a18b29c481ad77e87c1b42ef2b4554ba2db4 Mon Sep 17 00:00:00 2001 From: Valeriy Date: Thu, 19 Dec 2024 11:39:37 +0300 Subject: [PATCH 4/5] refactor(CartManagerImpl): Using compile time constant as top-level property instead of companion object --- .../com/personalization/features/cart/CartManagerImpl.kt | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/personalization-sdk/src/main/kotlin/com/personalization/features/cart/CartManagerImpl.kt b/personalization-sdk/src/main/kotlin/com/personalization/features/cart/CartManagerImpl.kt index f2db1da0..d0ae9417 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/features/cart/CartManagerImpl.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/features/cart/CartManagerImpl.kt @@ -10,6 +10,8 @@ import com.personalization.sdk.domain.usecases.network.SendNetworkMethodUseCase import org.json.JSONObject import javax.inject.Inject +private const val GET_CLIENT_SHOPPING_CART = "products/cart" + internal class CartManagerImpl @Inject constructor( private val sendNetworkMethodUseCase: SendNetworkMethodUseCase, ) : CartManager { @@ -37,8 +39,4 @@ internal class CartManagerImpl @Inject constructor( } ) } - - companion object { - const val GET_CLIENT_SHOPPING_CART = "products/cart" - } } From d9f9576de6cb9ec2eb65804ebc1b888a42ba5ad4 Mon Sep 17 00:00:00 2001 From: Valeriy Date: Thu, 19 Dec 2024 11:40:23 +0300 Subject: [PATCH 5/5] refactor(CartManager): Blank line at the end of File --- .../main/kotlin/com/personalization/api/managers/CartManager.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/personalization-sdk/src/main/kotlin/com/personalization/api/managers/CartManager.kt b/personalization-sdk/src/main/kotlin/com/personalization/api/managers/CartManager.kt index e8733707..ed9720b4 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/api/managers/CartManager.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/api/managers/CartManager.kt @@ -14,4 +14,4 @@ interface CartManager { onGetCartContent: (CartContent) -> Unit, onError: (code: Int, msg: String?) -> Unit = { _: Int, _: String? -> } ) -} \ No newline at end of file +}