Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat/add get client shopping cart api method #86

Merged
merged 5 commits into from
Dec 19, 2024
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -59,6 +60,9 @@ open class SDK {
@Inject
lateinit var productsManager: ProductsManager

@Inject
lateinit var cartManager: CartManager

@Inject
lateinit var trackEventManager: TrackEventManager

Expand Down
Original file line number Diff line number Diff line change
@@ -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? -> }
)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.personalization.api.responses.cart

import com.google.gson.annotations.SerializedName

data class CartContent(
@SerializedName("items") val content: List<CartItem>
)
Original file line number Diff line number Diff line change
@@ -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
)
Original file line number Diff line number Diff line change
@@ -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
)
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -65,6 +67,14 @@ class SdkModule {
sendNetworkMethodUseCase = sendNetworkMethodUseCase
)

@Singleton
@Provides
fun provideCartManager(
sendNetworkMethodUseCase: SendNetworkMethodUseCase
): CartManager = CartManagerImpl(
sendNetworkMethodUseCase = sendNetworkMethodUseCase
)

@Singleton
@Provides
fun provideTrackEventManager(
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
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 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)
}
}
)
}

companion object {
const val GET_CLIENT_SHOPPING_CART = "products/cart"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
Loading