diff --git a/personalization-sdk/src/main/kotlin/com/personalization/SDK.kt b/personalization-sdk/src/main/kotlin/com/personalization/SDK.kt index 8ba4627e..b0d018f1 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/SDK.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/SDK.kt @@ -21,6 +21,7 @@ import com.personalization.di.DaggerSdkComponent import com.personalization.features.notification.data.mapper.toNotificationData import com.personalization.features.notification.presentation.helpers.NotificationHelper import com.personalization.handlers.notifications.NotificationHandler +import com.personalization.sdk.domain.repositories.NPSRepository import com.personalization.sdk.domain.usecases.network.AddTaskToQueueUseCase import com.personalization.sdk.domain.usecases.network.InitNetworkUseCase import com.personalization.sdk.domain.usecases.network.SendNetworkMethodUseCase @@ -111,6 +112,9 @@ open class SDK { @Inject lateinit var notificationHelper: NotificationHelper + @Inject + lateinit var NPSRepository: NPSRepository + /** * @param shopId Shop key */ @@ -404,6 +408,22 @@ open class SDK { } } + fun review( + rate: Int, + channel: String, + category: String, + orderId: String? = null, + comment: String? = null, + listener: OnApiCallbackListener? = null + ) = NPSRepository.review( + rate = rate, + channel = channel, + category = category, + orderId = orderId, + comment = comment, + listener = listener + ) + /** * Request a dynamic block of recommendations * diff --git a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/di/RepositoriesModule.kt b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/di/RepositoriesModule.kt index f309a454..22153e4b 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/di/RepositoriesModule.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/di/RepositoriesModule.kt @@ -3,10 +3,12 @@ package com.personalization.sdk.data.di import com.personalization.sdk.data.repositories.advertising.AdvertisingRepositoryImpl import com.personalization.sdk.data.repositories.network.NetworkRepositoryImpl import com.personalization.sdk.data.repositories.notification.NotificationRepositoryImpl +import com.personalization.sdk.data.repositories.nps.NPSRepositoryImpl import com.personalization.sdk.data.repositories.preferences.PreferencesRepositoryImpl import com.personalization.sdk.data.repositories.recommendation.RecommendationRepositoryImpl import com.personalization.sdk.data.repositories.userSettings.UserSettingsRepositoryImpl import com.personalization.sdk.domain.repositories.AdvertisingRepository +import com.personalization.sdk.domain.repositories.NPSRepository import com.personalization.sdk.domain.repositories.NetworkRepository import com.personalization.sdk.domain.repositories.NotificationRepository import com.personalization.sdk.domain.repositories.PreferencesRepository @@ -39,4 +41,7 @@ abstract class RepositoriesModule { @Binds abstract fun bindAdvertisingRepository(impl: AdvertisingRepositoryImpl): AdvertisingRepository + @Binds + abstract fun bindNPSRepository(impl: NPSRepositoryImpl): NPSRepository + } diff --git a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/nps/NPSRepositoryImpl.kt b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/nps/NPSRepositoryImpl.kt new file mode 100644 index 00000000..d1f48438 --- /dev/null +++ b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/nps/NPSRepositoryImpl.kt @@ -0,0 +1,42 @@ +package com.personalization.sdk.data.repositories.nps + +import com.personalization.api.OnApiCallbackListener +import com.personalization.sdk.domain.repositories.NPSRepository +import com.personalization.sdk.domain.usecases.network.SendNetworkMethodUseCase +import org.json.JSONObject +import javax.inject.Inject + +private const val METHOD_CREATE = "nps/create" +private const val KEY_RATE = "rate" +private const val KEY_CHANNEL = "channel" +private const val KEY_CATEGORY = "category" +private const val KEY_ORDER_ID = "order_id" +private const val KEY_COMMENT = "comment" + +class NPSRepositoryImpl @Inject constructor( + private val sendNetworkMethodUseCase: SendNetworkMethodUseCase +) : NPSRepository { + + override fun review( + rate: Int, + channel: String, + category: String, + orderId: String?, + comment: String?, + listener: OnApiCallbackListener? + ) { + val params = JSONObject().apply { + put(KEY_RATE, rate) + put(KEY_CHANNEL, channel) + put(KEY_CATEGORY, category) + orderId?.let { put(KEY_ORDER_ID, it) } + comment?.let { put(KEY_COMMENT, it) } + } + + sendNetworkMethodUseCase.postAsync( + method = METHOD_CREATE, + params = params, + listener = listener + ) + } +} diff --git a/personalization-sdk/src/main/kotlin/com/personalization/sdk/domain/repositories/NPSRepository.kt b/personalization-sdk/src/main/kotlin/com/personalization/sdk/domain/repositories/NPSRepository.kt new file mode 100644 index 00000000..aab70bfb --- /dev/null +++ b/personalization-sdk/src/main/kotlin/com/personalization/sdk/domain/repositories/NPSRepository.kt @@ -0,0 +1,14 @@ +package com.personalization.sdk.domain.repositories + +import com.personalization.api.OnApiCallbackListener + +interface NPSRepository { + fun review( + rate: Int, + channel: String, + category: String, + orderId: String?, + comment: String?, + listener: OnApiCallbackListener? = null + ) +}