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..ed9720b4 --- /dev/null +++ b/personalization-sdk/src/main/kotlin/com/personalization/api/managers/CartManager.kt @@ -0,0 +1,17 @@ +package com.personalization.api.managers + +import com.personalization.api.responses.cart.CartContent + +interface CartManager { + + /** + * 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? -> } + ) +} 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/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..d0ae9417 --- /dev/null +++ b/personalization-sdk/src/main/kotlin/com/personalization/features/cart/CartManagerImpl.kt @@ -0,0 +1,42 @@ +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 + +private const val GET_CLIENT_SHOPPING_CART = "products/cart" + +internal class CartManagerImpl @Inject constructor( + private val sendNetworkMethodUseCase: SendNetworkMethodUseCase, +) : CartManager { + + override fun getClientShoppingCartContent( + onGetCartContent: (CartContent) -> Unit, + onError: (code: Int, msg: String?) -> Unit + ) { + sendNetworkMethodUseCase.getAsync( + method = GET_CLIENT_SHOPPING_CART, + params = Params().build(), + 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) + } + } + ) + } +} 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..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 @@ -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,