Skip to content

Commit

Permalink
Merge pull request #86 from rees46/feat/add-get-client-shopping-cart-…
Browse files Browse the repository at this point in the history
…api-method

Feat/add get client shopping cart api method
  • Loading branch information
TorinAsakura authored Dec 19, 2024
2 parents a26b664 + d9f9576 commit 990c4bc
Show file tree
Hide file tree
Showing 8 changed files with 97 additions and 1 deletion.
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,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)
}
}
)
}
}
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

0 comments on commit 990c4bc

Please sign in to comment.