From a3315df0033b7a67912947101ede196a886ad6a1 Mon Sep 17 00:00:00 2001 From: Valeriy Date: Wed, 18 Dec 2024 18:41:34 +0300 Subject: [PATCH 01/13] refactor: Added abstraction for PreferencesDataSource --- .../com/personalization/di/SdkComponent.kt | 3 +- .../sdk/data/di/DataSourcesModule.kt | 13 ++- .../preferences/PreferencesDataSource.kt | 78 +++-------------- .../preferences/PreferencesDataSourceImpl.kt | 86 +++++++++++++++++++ 4 files changed, 109 insertions(+), 71 deletions(-) create mode 100644 personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/preferences/PreferencesDataSourceImpl.kt diff --git a/personalization-sdk/src/main/kotlin/com/personalization/di/SdkComponent.kt b/personalization-sdk/src/main/kotlin/com/personalization/di/SdkComponent.kt index 09b6d80e..cf9337b9 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/di/SdkComponent.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/di/SdkComponent.kt @@ -2,6 +2,7 @@ package com.personalization.di import com.personalization.SDK import com.personalization.features.notification.service.NotificationService +import com.personalization.sdk.data.di.AbstractDataSourcesModule import com.personalization.sdk.data.di.DataSourcesModule import com.personalization.sdk.data.di.ModelsModule import com.personalization.sdk.data.di.RepositoriesModule @@ -14,6 +15,7 @@ import javax.inject.Singleton DataSourcesModule::class, RepositoriesModule::class, ModelsModule::class, + AbstractDataSourcesModule::class, SdkModule::class, AppModule::class ] @@ -30,5 +32,4 @@ interface SdkComponent { fun inject(sdk: SDK) fun inject(service: NotificationService) - } diff --git a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/di/DataSourcesModule.kt b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/di/DataSourcesModule.kt index 65db89c5..cf4c40ea 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/di/DataSourcesModule.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/di/DataSourcesModule.kt @@ -3,8 +3,10 @@ package com.personalization.sdk.data.di import com.personalization.sdk.data.repositories.network.NetworkDataSource import com.personalization.sdk.data.repositories.notification.NotificationDataSource import com.personalization.sdk.data.repositories.preferences.PreferencesDataSource +import com.personalization.sdk.data.repositories.preferences.PreferencesDataSourceImpl import com.personalization.sdk.data.repositories.recommendation.RecommendationDataSource import com.personalization.sdk.data.repositories.userSettings.UserSettingsDataSource +import dagger.Binds import dagger.Module import dagger.Provides import dagger.assisted.Assisted @@ -14,10 +16,6 @@ import javax.inject.Singleton @Module class DataSourcesModule { - @Provides - @Singleton - fun providePreferencesDataSource() = PreferencesDataSource() - @AssistedFactory interface NetworkDataSourceFactory { fun create( @@ -45,3 +43,10 @@ class DataSourcesModule { preferencesDataSource = preferencesDataSource ) } + +@Module +abstract class AbstractDataSourcesModule { + @Binds + @Singleton + abstract fun bindPreferencesDataSource(impl: PreferencesDataSourceImpl): PreferencesDataSource +} diff --git a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/preferences/PreferencesDataSource.kt b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/preferences/PreferencesDataSource.kt index 6797b3bc..55c87e79 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/preferences/PreferencesDataSource.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/preferences/PreferencesDataSource.kt @@ -1,83 +1,29 @@ package com.personalization.sdk.data.repositories.preferences import android.content.Context -import android.content.SharedPreferences -import kotlin.math.roundToInt -class PreferencesDataSource { +interface PreferencesDataSource { - private var sharedPreferences: SharedPreferences? = null - private var preferencesKey: String? = null - - internal fun initialize( + fun initialize( context: Context, preferencesKey: String - ) { - this.sharedPreferences = context.getSharedPreferences(preferencesKey, Context.MODE_PRIVATE) - this.preferencesKey = preferencesKey - } - - internal fun getToken(): String = getValue(TOKEN_KEY, DEFAULT_TOKEN) - internal fun saveToken(value: String) = saveValue(TOKEN_KEY, value) - - internal fun getLastPushTokenDate(): Long { - return getValue( - field = LAST_PUSH_TOKEN_DATE_KEY, - defaultValue = DEFAULT_LAST_PUSH_TOKEN_DATE - ) - } + ) - internal fun saveLastPushTokenDate(value: Long) { - saveValue( - field = LAST_PUSH_TOKEN_DATE_KEY, - value = value - ) - } + fun getToken(): String - internal fun getSegment(): String { - val field = preferencesKey + SEGMENT_KEY - return getValue( - field = field, - defaultValue = DEFAULT_SEGMENT - ) - } + fun saveToken(value: String) - internal fun getValue(field: String, defaultValue: String): String { - return sharedPreferences?.getString(field, defaultValue) ?: defaultValue - } + fun getLastPushTokenDate(): Long - internal fun getValue(field: String, defaultValue: Long): Long { - return sharedPreferences?.getLong(field, defaultValue) ?: defaultValue - } + fun saveLastPushTokenDate(value: Long) - internal fun saveValue(field: String, value: T) { - val putEditor = sharedPreferences?.let { sharedPreferences -> - with(sharedPreferences.edit()) { - when (value) { - is Boolean -> putBoolean(field, value) - is String -> putString(field, value) - is Long -> putLong(field, value) - is Float -> putFloat(field, value) - is Int -> putInt(field, value) - else -> null - } - } - } + fun getSegment(): String - putEditor?.apply() - } + fun getValue(field: String, defaultValue: String): String - internal fun removeValue(field: String) { - sharedPreferences?.edit()?.remove(field)?.apply() - } + fun getValue(field: String, defaultValue: Long): Long - companion object { - private const val DEFAULT_TOKEN = "" - private const val DEFAULT_LAST_PUSH_TOKEN_DATE = 0L - private val DEFAULT_SEGMENT = arrayOf("A", "B")[Math.random().roundToInt()] + fun saveValue(field: String, value: T) - private const val TOKEN_KEY = "token" - private const val LAST_PUSH_TOKEN_DATE_KEY = "last_push_token_date" - private const val SEGMENT_KEY = ".segment" - } + fun removeValue(field: String) } diff --git a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/preferences/PreferencesDataSourceImpl.kt b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/preferences/PreferencesDataSourceImpl.kt new file mode 100644 index 00000000..3ba1c360 --- /dev/null +++ b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/preferences/PreferencesDataSourceImpl.kt @@ -0,0 +1,86 @@ +package com.personalization.sdk.data.repositories.preferences + +import android.content.Context +import android.content.SharedPreferences +import javax.inject.Inject +import javax.inject.Singleton +import kotlin.math.roundToInt + +@Singleton +class PreferencesDataSourceImpl @Inject constructor() : PreferencesDataSource { + + private var sharedPreferences: SharedPreferences? = null + private var preferencesKey: String? = null + + override fun initialize( + context: Context, + preferencesKey: String + ) { + this.sharedPreferences = context.getSharedPreferences(preferencesKey, Context.MODE_PRIVATE) + this.preferencesKey = preferencesKey + } + + override fun getToken(): String = getValue(TOKEN_KEY, DEFAULT_TOKEN) + override fun saveToken(value: String) = saveValue(TOKEN_KEY, value) + + override fun getLastPushTokenDate(): Long { + return getValue( + field = LAST_PUSH_TOKEN_DATE_KEY, + defaultValue = DEFAULT_LAST_PUSH_TOKEN_DATE + ) + } + + override fun saveLastPushTokenDate(value: Long) { + saveValue( + field = LAST_PUSH_TOKEN_DATE_KEY, + value = value + ) + } + + override fun getSegment(): String { + val field = preferencesKey + SEGMENT_KEY + return getValue( + field = field, + defaultValue = DEFAULT_SEGMENT + ) + } + + override fun getValue(field: String, defaultValue: String): String { + return sharedPreferences?.getString(field, defaultValue) ?: defaultValue + } + + override fun getValue(field: String, defaultValue: Long): Long { + return sharedPreferences?.getLong(field, defaultValue) ?: defaultValue + } + + override fun saveValue(field: String, value: T) { + val putEditor = sharedPreferences?.let { sharedPreferences -> + with(sharedPreferences.edit()) { + when (value) { + is Boolean -> putBoolean(field, value) + is String -> putString(field, value) + is Long -> putLong(field, value) + is Float -> putFloat(field, value) + is Int -> putInt(field, value) + else -> null + } + } + } + + putEditor?.apply() + } + + override fun removeValue(field: String) { + sharedPreferences?.edit()?.remove(field)?.apply() + } + + companion object { + private const val DEFAULT_TOKEN = "" + private const val DEFAULT_LAST_PUSH_TOKEN_DATE = 0L + private val DEFAULT_SEGMENT = arrayOf("A", "B")[Math.random().roundToInt()] + + private const val TOKEN_KEY = "token" + private const val LAST_PUSH_TOKEN_DATE_KEY = "last_push_token_date" + private const val SEGMENT_KEY = ".segment" + } +} From edee9f40e28e30f99fe0a9a9c5c52b678b81c4a0 Mon Sep 17 00:00:00 2001 From: Valeriy Date: Wed, 18 Dec 2024 19:24:24 +0300 Subject: [PATCH 02/13] refactor: Added abstraction for NotificationDataSource --- .../sdk/data/di/DataSourcesModule.kt | 23 +++++++----- .../notification/NotificationDataSource.kt | 33 +++-------------- .../NotificationDataSourceImpl.kt | 37 +++++++++++++++++++ 3 files changed, 56 insertions(+), 37 deletions(-) create mode 100644 personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/notification/NotificationDataSourceImpl.kt diff --git a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/di/DataSourcesModule.kt b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/di/DataSourcesModule.kt index cf4c40ea..f32b4545 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/di/DataSourcesModule.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/di/DataSourcesModule.kt @@ -2,6 +2,7 @@ package com.personalization.sdk.data.di import com.personalization.sdk.data.repositories.network.NetworkDataSource import com.personalization.sdk.data.repositories.notification.NotificationDataSource +import com.personalization.sdk.data.repositories.notification.NotificationDataSourceImpl import com.personalization.sdk.data.repositories.preferences.PreferencesDataSource import com.personalization.sdk.data.repositories.preferences.PreferencesDataSourceImpl import com.personalization.sdk.data.repositories.recommendation.RecommendationDataSource @@ -35,18 +36,22 @@ class DataSourcesModule { @Provides @Singleton fun provideRecommendationDataSource() = RecommendationDataSource() - - @Provides - fun provideNotificationDataSource( - preferencesDataSource: PreferencesDataSource - ) = NotificationDataSource( - preferencesDataSource = preferencesDataSource - ) } @Module -abstract class AbstractDataSourcesModule { +interface AbstractDataSourcesModule { + @Binds @Singleton - abstract fun bindPreferencesDataSource(impl: PreferencesDataSourceImpl): PreferencesDataSource + fun bindPreferencesDataSource(impl: PreferencesDataSourceImpl): PreferencesDataSource + + companion object { + + @Provides + fun provideNotificationDataSource( + preferencesDataSource: PreferencesDataSource + ): NotificationDataSource = NotificationDataSourceImpl( + preferencesDataSource = preferencesDataSource + ) + } } diff --git a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/notification/NotificationDataSource.kt b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/notification/NotificationDataSource.kt index 59073654..f79aead3 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/notification/NotificationDataSource.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/notification/NotificationDataSource.kt @@ -1,37 +1,14 @@ package com.personalization.sdk.data.repositories.notification import com.personalization.sdk.data.models.NotificationSourceDto -import com.personalization.sdk.data.repositories.preferences.PreferencesDataSource -import javax.inject.Inject -class NotificationDataSource @Inject constructor( - private val preferencesDataSource: PreferencesDataSource -) { +interface NotificationDataSource { - internal fun getNotificationSourceDto(): NotificationSourceDto { - return NotificationSourceDto( - type = getType(), - id = getId(), - time = getTime() - ) - } + fun getNotificationSourceDto(): NotificationSourceDto - private fun getType(): String = preferencesDataSource.getValue(SOURCE_TYPE_KEY, DEFAULT_TYPE) - internal fun saveType(value: String) = preferencesDataSource.saveValue(SOURCE_TYPE_KEY, value) + fun saveType(value: String) - private fun getId(): String = preferencesDataSource.getValue(SOURCE_ID_KEY, DEFAULT_ID) - internal fun saveId(value: String) = preferencesDataSource.saveValue(SOURCE_ID_KEY, value) + fun saveId(value: String) - private fun getTime(): Long = preferencesDataSource.getValue(SOURCE_TIME_KEY, DEFAULT_TIME) - internal fun saveTime(value: Long) = preferencesDataSource.saveValue(SOURCE_TIME_KEY, value) - - companion object { - private const val DEFAULT_TYPE: String = "" - private const val DEFAULT_ID: String = "" - private const val DEFAULT_TIME: Long = 0L - - private const val SOURCE_TYPE_KEY: String = "source_type" - private const val SOURCE_ID_KEY: String = "source_id" - private const val SOURCE_TIME_KEY: String = "source_time" - } + fun saveTime(value: Long) } diff --git a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/notification/NotificationDataSourceImpl.kt b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/notification/NotificationDataSourceImpl.kt new file mode 100644 index 00000000..7837b2ef --- /dev/null +++ b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/notification/NotificationDataSourceImpl.kt @@ -0,0 +1,37 @@ +package com.personalization.sdk.data.repositories.notification + +import com.personalization.sdk.data.models.NotificationSourceDto +import com.personalization.sdk.data.repositories.preferences.PreferencesDataSource +import javax.inject.Inject + +class NotificationDataSourceImpl @Inject constructor( + private val preferencesDataSource: PreferencesDataSource +) : NotificationDataSource { + + override fun getNotificationSourceDto(): NotificationSourceDto { + return NotificationSourceDto( + type = getType(), + id = getId(), + time = getTime() + ) + } + + private fun getType(): String = preferencesDataSource.getValue(SOURCE_TYPE_KEY, DEFAULT_TYPE) + override fun saveType(value: String) = preferencesDataSource.saveValue(SOURCE_TYPE_KEY, value) + + private fun getId(): String = preferencesDataSource.getValue(SOURCE_ID_KEY, DEFAULT_ID) + override fun saveId(value: String) = preferencesDataSource.saveValue(SOURCE_ID_KEY, value) + + private fun getTime(): Long = preferencesDataSource.getValue(SOURCE_TIME_KEY, DEFAULT_TIME) + override fun saveTime(value: Long) = preferencesDataSource.saveValue(SOURCE_TIME_KEY, value) + + companion object { + private const val DEFAULT_TYPE: String = "" + private const val DEFAULT_ID: String = "" + private const val DEFAULT_TIME: Long = 0L + + private const val SOURCE_TYPE_KEY: String = "source_type" + private const val SOURCE_ID_KEY: String = "source_id" + private const val SOURCE_TIME_KEY: String = "source_time" + } +} From 4f807d22959a36818046be2ac15f1689800b4da6 Mon Sep 17 00:00:00 2001 From: Valeriy Date: Thu, 19 Dec 2024 17:36:09 +0300 Subject: [PATCH 03/13] refactor(NetworkDataSource): Remove NetworkDataSource --- .../sdk/data/di/DataSourcesModule.kt | 8 ----- .../repositories/network/NetworkDataSource.kt | 15 ---------- .../network/NetworkRepositoryImpl.kt | 29 ++++++++----------- 3 files changed, 12 insertions(+), 40 deletions(-) delete mode 100644 personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/network/NetworkDataSource.kt diff --git a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/di/DataSourcesModule.kt b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/di/DataSourcesModule.kt index f32b4545..d6f6f6b0 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/di/DataSourcesModule.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/di/DataSourcesModule.kt @@ -1,6 +1,5 @@ package com.personalization.sdk.data.di -import com.personalization.sdk.data.repositories.network.NetworkDataSource import com.personalization.sdk.data.repositories.notification.NotificationDataSource import com.personalization.sdk.data.repositories.notification.NotificationDataSourceImpl import com.personalization.sdk.data.repositories.preferences.PreferencesDataSource @@ -17,13 +16,6 @@ import javax.inject.Singleton @Module class DataSourcesModule { - @AssistedFactory - interface NetworkDataSourceFactory { - fun create( - baseUrl: String - ): NetworkDataSource - } - @AssistedFactory interface UserSettingsDataSourceFactory { fun create( diff --git a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/network/NetworkDataSource.kt b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/network/NetworkDataSource.kt deleted file mode 100644 index 95caf22a..00000000 --- a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/network/NetworkDataSource.kt +++ /dev/null @@ -1,15 +0,0 @@ -package com.personalization.sdk.data.repositories.network - -import com.personalization.utils.TimeUtils -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject - -class NetworkDataSource @AssistedInject constructor( - @Assisted val baseUrl: String -) { - - companion object { - - internal val sourceTimeDuration = TimeUtils.TWO_DAYS.inWholeMilliseconds - } -} diff --git a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/network/NetworkRepositoryImpl.kt b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/network/NetworkRepositoryImpl.kt index 6e22db27..117d3624 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/network/NetworkRepositoryImpl.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/network/NetworkRepositoryImpl.kt @@ -3,11 +3,15 @@ package com.personalization.sdk.data.repositories.network import android.net.Uri import com.personalization.SDK import com.personalization.api.OnApiCallbackListener -import com.personalization.sdk.data.di.DataSourcesModule import com.personalization.sdk.domain.models.NetworkMethod import com.personalization.sdk.domain.repositories.NetworkRepository import com.personalization.sdk.domain.repositories.NotificationRepository import com.personalization.sdk.domain.repositories.UserSettingsRepository +import com.personalization.utils.TimeUtils +import org.json.JSONArray +import org.json.JSONException +import org.json.JSONObject +import org.json.JSONTokener import java.io.BufferedReader import java.io.BufferedWriter import java.io.IOException @@ -20,27 +24,20 @@ import java.net.URL import java.nio.charset.StandardCharsets import java.util.Collections import javax.inject.Inject -import org.json.JSONArray -import org.json.JSONException -import org.json.JSONObject -import org.json.JSONTokener class NetworkRepositoryImpl @Inject constructor( - private val networkDataSourceFactory: DataSourcesModule.NetworkDataSourceFactory, private val userSettingsRepository: UserSettingsRepository, - private val notificationRepository: NotificationRepository + private val notificationRepository: NotificationRepository, ) : NetworkRepository { - private val queue: MutableList = Collections.synchronizedList(ArrayList()) + private lateinit var baseUrl: String - private var networkDataSource: NetworkDataSource? = null + private val queue: MutableList = Collections.synchronizedList(ArrayList()) override fun initialize( baseUrl: String ) { - networkDataSource = networkDataSourceFactory.create( - baseUrl = baseUrl - ) + this.baseUrl = baseUrl } override fun post( @@ -165,7 +162,7 @@ class NetworkRepositoryImpl @Inject constructor( userSettingsRepository.updateSidLastActTime() val notificationSource = - notificationRepository.getNotificationSource(NetworkDataSource.sourceTimeDuration) + notificationRepository.getNotificationSource(TimeUtils.TWO_DAYS.inWholeMilliseconds) try { val newParams = userSettingsRepository.addParams( @@ -230,9 +227,8 @@ class NetworkRepositoryImpl @Inject constructor( networkMethod: NetworkMethod, params: JSONObject ): Uri { - if (networkDataSource == null) throw Exception("Network not initialized.") - val builder = Uri.parse(networkDataSource!!.baseUrl + networkMethod.method).buildUpon() + val builder = Uri.parse(baseUrl + networkMethod.method).buildUpon() val it = params.keys() while (it.hasNext()) { @@ -247,10 +243,9 @@ class NetworkRepositoryImpl @Inject constructor( networkMethod: NetworkMethod, buildUri: Uri ): URL { - if (networkDataSource == null) throw Exception("Network not initialized.") return if (networkMethod is NetworkMethod.POST) { - URL(networkDataSource!!.baseUrl + networkMethod.method) + URL(baseUrl + networkMethod.method) } else { URL(buildUri.toString()) } From a42af827de6ad3df0c34136b237e0b3ce7b6566c Mon Sep 17 00:00:00 2001 From: Valeriy Date: Thu, 19 Dec 2024 19:18:32 +0300 Subject: [PATCH 04/13] refactor(UserSettingDataSource): UserSettingsDataSource abstraction --- .../sdk/data/di/DataSourcesModule.kt | 33 ++++++--- .../userSettings/UserSettingsDataSource.kt | 68 ++++-------------- .../UserSettingsDataSourceImpl.kt | 70 +++++++++++++++++++ .../UserSettingsRepositoryImpl.kt | 8 +-- 4 files changed, 110 insertions(+), 69 deletions(-) create mode 100644 personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsDataSourceImpl.kt diff --git a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/di/DataSourcesModule.kt b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/di/DataSourcesModule.kt index d6f6f6b0..5040bfdc 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/di/DataSourcesModule.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/di/DataSourcesModule.kt @@ -6,6 +6,7 @@ import com.personalization.sdk.data.repositories.preferences.PreferencesDataSour import com.personalization.sdk.data.repositories.preferences.PreferencesDataSourceImpl import com.personalization.sdk.data.repositories.recommendation.RecommendationDataSource import com.personalization.sdk.data.repositories.userSettings.UserSettingsDataSource +import com.personalization.sdk.data.repositories.userSettings.UserSettingsDataSourceImpl import dagger.Binds import dagger.Module import dagger.Provides @@ -16,15 +17,6 @@ import javax.inject.Singleton @Module class DataSourcesModule { - @AssistedFactory - interface UserSettingsDataSourceFactory { - fun create( - @Assisted("shopId") shopId: String, - @Assisted("segment") segment: String, - @Assisted("stream") stream: String - ): UserSettingsDataSource - } - @Provides @Singleton fun provideRecommendationDataSource() = RecommendationDataSource() @@ -45,5 +37,28 @@ interface AbstractDataSourcesModule { ): NotificationDataSource = NotificationDataSourceImpl( preferencesDataSource = preferencesDataSource ) + + @Provides + @Singleton + fun bindUserSettingsDataSource( + preferencesDataSource: PreferencesDataSource, + shopId: String, + segment: String, + stream: String + ): UserSettingsDataSource = UserSettingsDataSourceImpl( + preferencesDataSource = preferencesDataSource, + shopId = shopId, + segment = segment, + stream = stream + ) } } + +@AssistedFactory +interface UserSettingsDataSourceFactory { + fun create( + @Assisted("shopId") shopId: String, + @Assisted("segment") segment: String, + @Assisted("stream") stream: String + ): UserSettingsDataSourceImpl +} diff --git a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsDataSource.kt b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsDataSource.kt index 0e6d528e..25b2f8e9 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsDataSource.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsDataSource.kt @@ -1,70 +1,26 @@ package com.personalization.sdk.data.repositories.userSettings -import com.personalization.sdk.data.models.params.UserSettingsParams -import com.personalization.sdk.data.repositories.preferences.PreferencesDataSource -import com.personalization.sdk.data.utils.ParamsEnumUtils.addOptionalParam import com.personalization.sdk.domain.models.NotificationSource -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject import org.json.JSONObject -class UserSettingsDataSource @AssistedInject constructor( - private val preferencesDataSource: PreferencesDataSource, - @Assisted("shopId") private val shopId: String, - @Assisted("segment") private val segment: String, - @Assisted("stream") private val stream: String -) { +interface UserSettingsDataSource { - private var isInitialized: Boolean = false - - internal fun addParams( + fun addParams( params: JSONObject, notificationSource: NotificationSource?, - ): JSONObject { - params.put(UserSettingsParams.SHOP_ID, shopId) - - addOptionalParam(params, UserSettingsParams.DID, getDid()) - addOptionalParam(params, UserSettingsParams.SID, getSid()) - addOptionalParam(params, UserSettingsParams.SEANCE, getSid()) - params.put(UserSettingsParams.SEGMENT, segment) - params.put(UserSettingsParams.STREAM, stream) - - notificationSource?.let { - val notificationObject = JSONObject() - .put(UserSettingsParams.SOURCE_FROM, it.type) - .put(UserSettingsParams.SOURCE_CODE, it.id) - params.put(UserSettingsParams.SOURCE, notificationObject) - } - - return params - } - - internal fun getSidLastActTime(): Long = - preferencesDataSource.getValue(SID_LAST_ACT_KEY, DEFAULT_SID_LAST_ACT_TIME) - - internal fun saveSidLastActTime(value: Long) = - preferencesDataSource.saveValue(SID_LAST_ACT_KEY, value) - - internal fun getSid(): String = preferencesDataSource.getValue(SID_KEY, DEFAULT_SID) - internal fun saveSid(value: String) = preferencesDataSource.saveValue(SID_KEY, value) + ): JSONObject - internal fun getDid(): String = preferencesDataSource.getValue(DID_KEY, DEFAULT_DID) - internal fun saveDid(value: String) = preferencesDataSource.saveValue(DID_KEY, value) - internal fun removeDid() = preferencesDataSource.removeValue(DID_KEY) + fun getSidLastActTime(): Long - internal fun getIsInitialized(): Boolean = isInitialized - internal fun setIsInitialized(value: Boolean) { - isInitialized = value - } + fun saveSidLastActTime(value: Long) - companion object { + fun getSid(): String + fun saveSid(value: String) - private const val DEFAULT_DID = "" - private const val DEFAULT_SID = "" - private const val DEFAULT_SID_LAST_ACT_TIME = 0L + fun getDid(): String + fun saveDid(value: String) + fun removeDid() - private const val DID_KEY = "did" - private const val SID_KEY = "sid" - private const val SID_LAST_ACT_KEY = "sid_last_act" - } + fun getIsInitialized(): Boolean + fun setIsInitialized(value: Boolean) } diff --git a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsDataSourceImpl.kt b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsDataSourceImpl.kt new file mode 100644 index 00000000..a06b9414 --- /dev/null +++ b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsDataSourceImpl.kt @@ -0,0 +1,70 @@ +package com.personalization.sdk.data.repositories.userSettings + +import com.personalization.sdk.data.models.params.UserSettingsParams +import com.personalization.sdk.data.repositories.preferences.PreferencesDataSource +import com.personalization.sdk.data.utils.ParamsEnumUtils.addOptionalParam +import com.personalization.sdk.domain.models.NotificationSource +import dagger.assisted.Assisted +import dagger.assisted.AssistedInject +import org.json.JSONObject + +class UserSettingsDataSourceImpl @AssistedInject constructor( + private val preferencesDataSource: PreferencesDataSource, + @Assisted("shopId") private val shopId: String, + @Assisted("segment") private val segment: String, + @Assisted("stream") private val stream: String +) : UserSettingsDataSource { + + private var isInitialized: Boolean = false + + override fun addParams( + params: JSONObject, + notificationSource: NotificationSource?, + ): JSONObject { + params.put(UserSettingsParams.SHOP_ID, shopId) + + addOptionalParam(params, UserSettingsParams.DID, getDid()) + addOptionalParam(params, UserSettingsParams.SID, getSid()) + addOptionalParam(params, UserSettingsParams.SEANCE, getSid()) + params.put(UserSettingsParams.SEGMENT, segment) + params.put(UserSettingsParams.STREAM, stream) + + notificationSource?.let { + val notificationObject = JSONObject() + .put(UserSettingsParams.SOURCE_FROM, it.type) + .put(UserSettingsParams.SOURCE_CODE, it.id) + params.put(UserSettingsParams.SOURCE, notificationObject) + } + + return params + } + + override fun getSidLastActTime(): Long = + preferencesDataSource.getValue(SID_LAST_ACT_KEY, DEFAULT_SID_LAST_ACT_TIME) + + override fun saveSidLastActTime(value: Long) = + preferencesDataSource.saveValue(SID_LAST_ACT_KEY, value) + + override fun getSid(): String = preferencesDataSource.getValue(SID_KEY, DEFAULT_SID) + override fun saveSid(value: String) = preferencesDataSource.saveValue(SID_KEY, value) + + override fun getDid(): String = preferencesDataSource.getValue(DID_KEY, DEFAULT_DID) + override fun saveDid(value: String) = preferencesDataSource.saveValue(DID_KEY, value) + override fun removeDid() = preferencesDataSource.removeValue(DID_KEY) + + override fun getIsInitialized(): Boolean = isInitialized + override fun setIsInitialized(value: Boolean) { + isInitialized = value + } + + companion object { + + private const val DEFAULT_DID = "" + private const val DEFAULT_SID = "" + private const val DEFAULT_SID_LAST_ACT_TIME = 0L + + private const val DID_KEY = "did" + private const val SID_KEY = "sid" + private const val SID_LAST_ACT_KEY = "sid_last_act" + } +} diff --git a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsRepositoryImpl.kt b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsRepositoryImpl.kt index b220589d..f14e3215 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsRepositoryImpl.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsRepositoryImpl.kt @@ -1,16 +1,16 @@ package com.personalization.sdk.data.repositories.userSettings -import com.personalization.sdk.data.di.DataSourcesModule +import com.personalization.sdk.data.di.UserSettingsDataSourceFactory import com.personalization.sdk.domain.models.NotificationSource import com.personalization.sdk.domain.repositories.UserSettingsRepository -import javax.inject.Inject import org.json.JSONObject +import javax.inject.Inject class UserSettingsRepositoryImpl @Inject constructor( - private val userSettingsDataSourceFactory: DataSourcesModule.UserSettingsDataSourceFactory, + private val userSettingsDataSourceFactory: UserSettingsDataSourceFactory, ) : UserSettingsRepository { - private lateinit var userSettingsDataSource: UserSettingsDataSource + private lateinit var userSettingsDataSource: UserSettingsDataSourceImpl override fun initialize( shopId: String, From 07813841236ddf95a4ff9915acb00b47393b3e81 Mon Sep 17 00:00:00 2001 From: Valeriy Date: Fri, 20 Dec 2024 10:37:58 +0300 Subject: [PATCH 05/13] refactor(RecommendationDataSource): RecommendationDataSource abstraction --- .../kotlin/com/personalization/di/SdkComponent.kt | 2 -- .../sdk/data/di/DataSourcesModule.kt | 15 ++++++--------- .../recommendation/RecommendationDataSource.kt | 11 +++-------- .../RecommendationDataSourceImpl.kt | 15 +++++++++++++++ 4 files changed, 24 insertions(+), 19 deletions(-) create mode 100644 personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/recommendation/RecommendationDataSourceImpl.kt diff --git a/personalization-sdk/src/main/kotlin/com/personalization/di/SdkComponent.kt b/personalization-sdk/src/main/kotlin/com/personalization/di/SdkComponent.kt index cf9337b9..f4f65213 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/di/SdkComponent.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/di/SdkComponent.kt @@ -2,7 +2,6 @@ package com.personalization.di import com.personalization.SDK import com.personalization.features.notification.service.NotificationService -import com.personalization.sdk.data.di.AbstractDataSourcesModule import com.personalization.sdk.data.di.DataSourcesModule import com.personalization.sdk.data.di.ModelsModule import com.personalization.sdk.data.di.RepositoriesModule @@ -15,7 +14,6 @@ import javax.inject.Singleton DataSourcesModule::class, RepositoriesModule::class, ModelsModule::class, - AbstractDataSourcesModule::class, SdkModule::class, AppModule::class ] diff --git a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/di/DataSourcesModule.kt b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/di/DataSourcesModule.kt index 5040bfdc..d03e6272 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/di/DataSourcesModule.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/di/DataSourcesModule.kt @@ -5,6 +5,7 @@ import com.personalization.sdk.data.repositories.notification.NotificationDataSo import com.personalization.sdk.data.repositories.preferences.PreferencesDataSource import com.personalization.sdk.data.repositories.preferences.PreferencesDataSourceImpl import com.personalization.sdk.data.repositories.recommendation.RecommendationDataSource +import com.personalization.sdk.data.repositories.recommendation.RecommendationDataSourceImpl import com.personalization.sdk.data.repositories.userSettings.UserSettingsDataSource import com.personalization.sdk.data.repositories.userSettings.UserSettingsDataSourceImpl import dagger.Binds @@ -15,19 +16,15 @@ import dagger.assisted.AssistedFactory import javax.inject.Singleton @Module -class DataSourcesModule { +interface DataSourcesModule { - @Provides + @Binds @Singleton - fun provideRecommendationDataSource() = RecommendationDataSource() -} - -@Module -interface AbstractDataSourcesModule { + fun bindPreferencesDataSource(impl: PreferencesDataSourceImpl): PreferencesDataSource @Binds @Singleton - fun bindPreferencesDataSource(impl: PreferencesDataSourceImpl): PreferencesDataSource + fun bindRecommendationDataSource(impl: RecommendationDataSourceImpl): RecommendationDataSource companion object { @@ -40,7 +37,7 @@ interface AbstractDataSourcesModule { @Provides @Singleton - fun bindUserSettingsDataSource( + fun provideUserSettingsDataSource( preferencesDataSource: PreferencesDataSource, shopId: String, segment: String, diff --git a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/recommendation/RecommendationDataSource.kt b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/recommendation/RecommendationDataSource.kt index d25254cc..09e8c035 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/recommendation/RecommendationDataSource.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/recommendation/RecommendationDataSource.kt @@ -1,15 +1,10 @@ package com.personalization.sdk.data.repositories.recommendation import com.personalization.sdk.domain.models.RecommendedBy -import javax.inject.Inject -class RecommendationDataSource @Inject constructor() { +interface RecommendationDataSource { - private var recommendedBy: RecommendedBy? = null + fun getRecommendedBy(): RecommendedBy? - fun getRecommendedBy(): RecommendedBy? = recommendedBy - - fun setRecommendedBy(recommendedBy: RecommendedBy?) { - this.recommendedBy = recommendedBy - } + fun setRecommendedBy(recommendedBy: RecommendedBy?) } diff --git a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/recommendation/RecommendationDataSourceImpl.kt b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/recommendation/RecommendationDataSourceImpl.kt new file mode 100644 index 00000000..3ace76e3 --- /dev/null +++ b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/recommendation/RecommendationDataSourceImpl.kt @@ -0,0 +1,15 @@ +package com.personalization.sdk.data.repositories.recommendation + +import com.personalization.sdk.domain.models.RecommendedBy +import javax.inject.Inject + +class RecommendationDataSourceImpl @Inject constructor() : RecommendationDataSource { + + private var recommendedBy: RecommendedBy? = null + + override fun getRecommendedBy(): RecommendedBy? = recommendedBy + + override fun setRecommendedBy(recommendedBy: RecommendedBy?) { + this.recommendedBy = recommendedBy + } +} From 007b80d4ef43b7e048fd205d95b28dedba969465 Mon Sep 17 00:00:00 2001 From: Valeriy Date: Fri, 20 Dec 2024 10:46:24 +0300 Subject: [PATCH 06/13] refactor(dataSourcesImpl): Made all runtime constants as top-level property --- .../NotificationDataSourceImpl.kt | 18 ++++++++---------- .../preferences/PreferencesDataSourceImpl.kt | 19 ++++++++----------- .../UserSettingsDataSourceImpl.kt | 19 ++++++++----------- 3 files changed, 24 insertions(+), 32 deletions(-) diff --git a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/notification/NotificationDataSourceImpl.kt b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/notification/NotificationDataSourceImpl.kt index 7837b2ef..1459c706 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/notification/NotificationDataSourceImpl.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/notification/NotificationDataSourceImpl.kt @@ -4,6 +4,14 @@ import com.personalization.sdk.data.models.NotificationSourceDto import com.personalization.sdk.data.repositories.preferences.PreferencesDataSource import javax.inject.Inject +private const val DEFAULT_TYPE: String = "" +private const val DEFAULT_ID: String = "" +private const val DEFAULT_TIME: Long = 0L + +private const val SOURCE_TYPE_KEY: String = "source_type" +private const val SOURCE_ID_KEY: String = "source_id" +private const val SOURCE_TIME_KEY: String = "source_time" + class NotificationDataSourceImpl @Inject constructor( private val preferencesDataSource: PreferencesDataSource ) : NotificationDataSource { @@ -24,14 +32,4 @@ class NotificationDataSourceImpl @Inject constructor( private fun getTime(): Long = preferencesDataSource.getValue(SOURCE_TIME_KEY, DEFAULT_TIME) override fun saveTime(value: Long) = preferencesDataSource.saveValue(SOURCE_TIME_KEY, value) - - companion object { - private const val DEFAULT_TYPE: String = "" - private const val DEFAULT_ID: String = "" - private const val DEFAULT_TIME: Long = 0L - - private const val SOURCE_TYPE_KEY: String = "source_type" - private const val SOURCE_ID_KEY: String = "source_id" - private const val SOURCE_TIME_KEY: String = "source_time" - } } diff --git a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/preferences/PreferencesDataSourceImpl.kt b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/preferences/PreferencesDataSourceImpl.kt index 3ba1c360..18cf15bc 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/preferences/PreferencesDataSourceImpl.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/preferences/PreferencesDataSourceImpl.kt @@ -4,7 +4,14 @@ import android.content.Context import android.content.SharedPreferences import javax.inject.Inject import javax.inject.Singleton -import kotlin.math.roundToInt + +private const val DEFAULT_TOKEN = "" +private const val DEFAULT_LAST_PUSH_TOKEN_DATE = 0L +private val DEFAULT_SEGMENT = arrayOf("A", "B").random() + +private const val TOKEN_KEY = "token" +private const val LAST_PUSH_TOKEN_DATE_KEY = "last_push_token_date" +private const val SEGMENT_KEY = ".segment" @Singleton class PreferencesDataSourceImpl @Inject constructor() : PreferencesDataSource { @@ -73,14 +80,4 @@ class PreferencesDataSourceImpl @Inject constructor() : PreferencesDataSource { override fun removeValue(field: String) { sharedPreferences?.edit()?.remove(field)?.apply() } - - companion object { - private const val DEFAULT_TOKEN = "" - private const val DEFAULT_LAST_PUSH_TOKEN_DATE = 0L - private val DEFAULT_SEGMENT = arrayOf("A", "B")[Math.random().roundToInt()] - - private const val TOKEN_KEY = "token" - private const val LAST_PUSH_TOKEN_DATE_KEY = "last_push_token_date" - private const val SEGMENT_KEY = ".segment" - } } diff --git a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsDataSourceImpl.kt b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsDataSourceImpl.kt index a06b9414..d52ee2ba 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsDataSourceImpl.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsDataSourceImpl.kt @@ -8,6 +8,14 @@ import dagger.assisted.Assisted import dagger.assisted.AssistedInject import org.json.JSONObject +private const val DEFAULT_DID = "" +private const val DEFAULT_SID = "" +private const val DEFAULT_SID_LAST_ACT_TIME = 0L + +private const val DID_KEY = "did" +private const val SID_KEY = "sid" +private const val SID_LAST_ACT_KEY = "sid_last_act" + class UserSettingsDataSourceImpl @AssistedInject constructor( private val preferencesDataSource: PreferencesDataSource, @Assisted("shopId") private val shopId: String, @@ -56,15 +64,4 @@ class UserSettingsDataSourceImpl @AssistedInject constructor( override fun setIsInitialized(value: Boolean) { isInitialized = value } - - companion object { - - private const val DEFAULT_DID = "" - private const val DEFAULT_SID = "" - private const val DEFAULT_SID_LAST_ACT_TIME = 0L - - private const val DID_KEY = "did" - private const val SID_KEY = "sid" - private const val SID_LAST_ACT_KEY = "sid_last_act" - } } From ab655656e5404d3a3e00f9376971f27cf1322d63 Mon Sep 17 00:00:00 2001 From: Valeriy Date: Fri, 20 Dec 2024 13:39:17 +0300 Subject: [PATCH 07/13] refactor(SDK): Removed dublicates in documentation --- .../src/main/kotlin/com/personalization/SDK.kt | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/personalization-sdk/src/main/kotlin/com/personalization/SDK.kt b/personalization-sdk/src/main/kotlin/com/personalization/SDK.kt index 5a26bd6c..530ffe4f 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/SDK.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/SDK.kt @@ -602,13 +602,6 @@ open class SDK { * @param subscriptions * @param listener */ - /** - * Manage subscriptions - * - * @param email - * @param phone - * @param subscriptions - */ fun manageSubscription( email: String?, phone: String?, @@ -637,16 +630,6 @@ open class SDK { * @param subscriptions * @param listener */ - /** - * Manage subscriptions - * - * @param email - * @param phone - * @param externalId - * @param loyaltyId - * @param telegramId - * @param subscriptions - */ @JvmOverloads fun manageSubscription( email: String?, From a405ba731d1ca89f87de4f025d4ffd79c32521ed Mon Sep 17 00:00:00 2001 From: Valeriy Date: Wed, 25 Dec 2024 19:46:47 +0300 Subject: [PATCH 08/13] refactor(JSONObject): Added functions to add queries params to JSONObject. --- .../NotificationRepositoryImpl.kt | 32 +++++++++---------- .../UserSettingsDataSourceImpl.kt | 30 ++++++++--------- .../sdk/data/utils/ParamsEnum.utils.kt | 14 -------- .../sdk/data/utils/QueryParams.utils.kt | 20 ++++++++++++ 4 files changed, 49 insertions(+), 47 deletions(-) delete mode 100644 personalization-sdk/src/main/kotlin/com/personalization/sdk/data/utils/ParamsEnum.utils.kt create mode 100644 personalization-sdk/src/main/kotlin/com/personalization/sdk/data/utils/QueryParams.utils.kt diff --git a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/notification/NotificationRepositoryImpl.kt b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/notification/NotificationRepositoryImpl.kt index f92c4160..6cd8decd 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/notification/NotificationRepositoryImpl.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/notification/NotificationRepositoryImpl.kt @@ -5,11 +5,11 @@ import com.personalization.api.OnApiCallbackListener import com.personalization.api.responses.notifications.GetAllNotificationsResponse import com.personalization.sdk.data.mappers.notification.NotificationMapper import com.personalization.sdk.data.models.params.GetAllNotificationsParams -import com.personalization.sdk.data.utils.ParamsEnumUtils.addOptionalParam +import com.personalization.sdk.data.utils.QueryParamsUtils.formNewJSONWithMultipleParams import com.personalization.sdk.domain.models.NotificationSource import com.personalization.sdk.domain.repositories.NotificationRepository -import javax.inject.Inject import org.json.JSONObject +import javax.inject.Inject class NotificationRepositoryImpl @Inject constructor( private val notificationDataSource: NotificationDataSource, @@ -42,21 +42,19 @@ class NotificationRepositoryImpl @Inject constructor( channel: String, page: Int?, limit: Int? - ): JSONObject { - val params = JSONObject() - - addOptionalParam(params, GetAllNotificationsParams.EMAIL, email) - addOptionalParam(params, GetAllNotificationsParams.PHONE, phone) - addOptionalParam(params, GetAllNotificationsParams.EXTERNAL_ID, externalId) - addOptionalParam(params, GetAllNotificationsParams.LOYALTY_ID, loyaltyId) - params.put(GetAllNotificationsParams.DATE_FROM, dateFrom) - params.put(GetAllNotificationsParams.TYPE, type) - params.put(GetAllNotificationsParams.CHANNEL, channel) - addOptionalParam(params, GetAllNotificationsParams.PAGE, page) - addOptionalParam(params, GetAllNotificationsParams.LIMIT, limit) - - return params - } + ): JSONObject = formNewJSONWithMultipleParams( + mapOf( + GetAllNotificationsParams.EMAIL to email, + GetAllNotificationsParams.PHONE to phone, + GetAllNotificationsParams.EXTERNAL_ID to externalId, + GetAllNotificationsParams.LOYALTY_ID to loyaltyId, + GetAllNotificationsParams.DATE_FROM to dateFrom, + GetAllNotificationsParams.TYPE to type, + GetAllNotificationsParams.CHANNEL to channel, + GetAllNotificationsParams.PAGE to page, + GetAllNotificationsParams.LIMIT to limit, + ) + ) override fun getAllNotificationListener( onGetAllNotifications: (GetAllNotificationsResponse) -> Unit, diff --git a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsDataSourceImpl.kt b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsDataSourceImpl.kt index d52ee2ba..fc177c81 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsDataSourceImpl.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsDataSourceImpl.kt @@ -2,7 +2,7 @@ package com.personalization.sdk.data.repositories.userSettings import com.personalization.sdk.data.models.params.UserSettingsParams import com.personalization.sdk.data.repositories.preferences.PreferencesDataSource -import com.personalization.sdk.data.utils.ParamsEnumUtils.addOptionalParam +import com.personalization.sdk.data.utils.QueryParamsUtils.addMultipleParams import com.personalization.sdk.domain.models.NotificationSource import dagger.assisted.Assisted import dagger.assisted.AssistedInject @@ -29,21 +29,19 @@ class UserSettingsDataSourceImpl @AssistedInject constructor( params: JSONObject, notificationSource: NotificationSource?, ): JSONObject { - params.put(UserSettingsParams.SHOP_ID, shopId) - - addOptionalParam(params, UserSettingsParams.DID, getDid()) - addOptionalParam(params, UserSettingsParams.SID, getSid()) - addOptionalParam(params, UserSettingsParams.SEANCE, getSid()) - params.put(UserSettingsParams.SEGMENT, segment) - params.put(UserSettingsParams.STREAM, stream) - - notificationSource?.let { - val notificationObject = JSONObject() - .put(UserSettingsParams.SOURCE_FROM, it.type) - .put(UserSettingsParams.SOURCE_CODE, it.id) - params.put(UserSettingsParams.SOURCE, notificationObject) - } - + addMultipleParams( + params = params, + paramsToAdd = mapOf( + UserSettingsParams.SHOP_ID to shopId, + UserSettingsParams.DID to getDid(), + UserSettingsParams.SID to getSid(), + UserSettingsParams.SEANCE to getSid(), + UserSettingsParams.SEGMENT to segment, + UserSettingsParams.STREAM to stream, + UserSettingsParams.SOURCE_FROM to notificationSource?.type, + UserSettingsParams.SOURCE_CODE to notificationSource?.id + ) + ) return params } diff --git a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/utils/ParamsEnum.utils.kt b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/utils/ParamsEnum.utils.kt deleted file mode 100644 index 16f43720..00000000 --- a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/utils/ParamsEnum.utils.kt +++ /dev/null @@ -1,14 +0,0 @@ -package com.personalization.sdk.data.utils - -import org.json.JSONObject - -object ParamsEnumUtils { - - fun addOptionalParam(params: JSONObject, key: String, value: String?) { - value?.let { params.put(key, it) } - } - - fun addOptionalParam(params: JSONObject, key: String, value: Int?) { - value?.let { params.put(key, it) } - } -} diff --git a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/utils/QueryParams.utils.kt b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/utils/QueryParams.utils.kt new file mode 100644 index 00000000..7e064a8d --- /dev/null +++ b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/utils/QueryParams.utils.kt @@ -0,0 +1,20 @@ +package com.personalization.sdk.data.utils + +import org.json.JSONObject + +internal object QueryParamsUtils { + + fun addOptionalParam(params: JSONObject, key: String, value: T?) { + value?.let { params.put(key, it) } + } + + fun addMultipleParams(params: JSONObject, paramsToAdd: Map) { + paramsToAdd.forEach { param -> + addOptionalParam(params, param.key, param.value) + } + } + + fun formNewJSONWithMultipleParams(paramsToAdd: Map): JSONObject { + return JSONObject().also { addMultipleParams(it, paramsToAdd) } + } +} From ebc2402d26fa1210d1d380f11c2ae92e7d8ee0aa Mon Sep 17 00:00:00 2001 From: Valeriy Date: Wed, 25 Dec 2024 20:19:53 +0300 Subject: [PATCH 09/13] refactor(UserSettingDataSourceImpl): Removed isInitialized field and all corresponding methods. --- .../kotlin/com/personalization/RegisterManager.kt | 11 +++++------ .../src/main/kotlin/com/personalization/SDK.kt | 13 +++---------- .../repositories/network/NetworkRepositoryImpl.kt | 2 +- .../userSettings/UserSettingsDataSource.kt | 3 --- .../userSettings/UserSettingsDataSourceImpl.kt | 7 ------- .../userSettings/UserSettingsRepositoryImpl.kt | 7 ------- .../domain/repositories/UserSettingsRepository.kt | 3 --- .../userSettings/GetUserSettingsValueUseCase.kt | 2 -- .../userSettings/UpdateUserSettingsValueUseCase.kt | 2 -- 9 files changed, 9 insertions(+), 41 deletions(-) diff --git a/personalization-sdk/src/main/kotlin/com/personalization/RegisterManager.kt b/personalization-sdk/src/main/kotlin/com/personalization/RegisterManager.kt index 60b017ed..13adcdf5 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/RegisterManager.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/RegisterManager.kt @@ -20,15 +20,15 @@ import com.personalization.sdk.domain.usecases.preferences.GetPreferencesValueUs import com.personalization.sdk.domain.usecases.preferences.SavePreferencesValueUseCase import com.personalization.sdk.domain.usecases.userSettings.GetUserSettingsValueUseCase import com.personalization.sdk.domain.usecases.userSettings.UpdateUserSettingsValueUseCase -import java.security.SecureRandom -import java.util.Date -import java.util.TimeZone -import javax.inject.Inject import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.launch import org.json.JSONObject +import java.security.SecureRandom +import java.util.Date +import java.util.TimeZone +import javax.inject.Inject class RegisterManager @Inject constructor( private val getPreferencesValueUseCase: GetPreferencesValueUseCase, @@ -121,7 +121,7 @@ class RegisterManager @Inject constructor( lastUpdate: Long ): Boolean { return autoSendPushToken && - (savedToken.isEmpty() || savedToken != newToken || (currentDate - lastUpdate >= ONE_WEEK_MILLISECONDS)) + (savedToken.isEmpty() || savedToken != newToken || (currentDate - lastUpdate >= ONE_WEEK_MILLISECONDS)) } private fun sendPushTokenToServer(token: String, currentDate: Long) { @@ -223,7 +223,6 @@ class RegisterManager @Inject constructor( } private fun initializeSdk(seance: String?) { - updateUserSettingsValueUseCase.updateIsInitialized(value = true) val finalSeance = seance ?: generateOrRetrieveSeance() updateUserSettingsValueUseCase.updateSid(value = finalSeance) executeQueueTasksUseCase.invoke() diff --git a/personalization-sdk/src/main/kotlin/com/personalization/SDK.kt b/personalization-sdk/src/main/kotlin/com/personalization/SDK.kt index 530ffe4f..fd4d3352 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/SDK.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/SDK.kt @@ -32,10 +32,10 @@ import com.personalization.sdk.domain.usecases.userSettings.InitUserSettingsUseC import com.personalization.stories.StoriesManager import com.personalization.stories.views.StoriesView import com.personalization.utils.DomainFormattingUtils.formatApiDomain -import java.util.Locale -import javax.inject.Inject import org.json.JSONException import org.json.JSONObject +import java.util.Locale +import javax.inject.Inject open class SDK { @@ -230,14 +230,7 @@ open class SDK { replaceWith = ReplaceWith("getSid(): String") ) fun getSid(listener: Consumer) { - val thread = Thread { - listener.accept(getSid()) - } - if (getUserSettingsValueUseCase.getIsInitialized()) { - thread.start() - } else { - addTaskToQueueUseCase.invoke(thread) - } + listener.accept(getSid()) } /** diff --git a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/network/NetworkRepositoryImpl.kt b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/network/NetworkRepositoryImpl.kt index 117d3624..27d15a76 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/network/NetworkRepositoryImpl.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/network/NetworkRepositoryImpl.kt @@ -123,7 +123,7 @@ class NetworkRepositoryImpl @Inject constructor( private fun sendAsync(sendFunction: () -> Unit) { val thread = Thread(sendFunction) if (userSettingsRepository.getDid() - .isNotEmpty() && userSettingsRepository.getIsInitialized() + .isNotEmpty() ) { thread.start() } else { diff --git a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsDataSource.kt b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsDataSource.kt index 25b2f8e9..e98dc279 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsDataSource.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsDataSource.kt @@ -20,7 +20,4 @@ interface UserSettingsDataSource { fun getDid(): String fun saveDid(value: String) fun removeDid() - - fun getIsInitialized(): Boolean - fun setIsInitialized(value: Boolean) } diff --git a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsDataSourceImpl.kt b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsDataSourceImpl.kt index fc177c81..01bcdde4 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsDataSourceImpl.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsDataSourceImpl.kt @@ -23,8 +23,6 @@ class UserSettingsDataSourceImpl @AssistedInject constructor( @Assisted("stream") private val stream: String ) : UserSettingsDataSource { - private var isInitialized: Boolean = false - override fun addParams( params: JSONObject, notificationSource: NotificationSource?, @@ -57,9 +55,4 @@ class UserSettingsDataSourceImpl @AssistedInject constructor( override fun getDid(): String = preferencesDataSource.getValue(DID_KEY, DEFAULT_DID) override fun saveDid(value: String) = preferencesDataSource.saveValue(DID_KEY, value) override fun removeDid() = preferencesDataSource.removeValue(DID_KEY) - - override fun getIsInitialized(): Boolean = isInitialized - override fun setIsInitialized(value: Boolean) { - isInitialized = value - } } diff --git a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsRepositoryImpl.kt b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsRepositoryImpl.kt index f14e3215..b0f98126 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsRepositoryImpl.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsRepositoryImpl.kt @@ -52,13 +52,6 @@ class UserSettingsRepositoryImpl @Inject constructor( override fun getSidLastActTime(): Long = userSettingsDataSource.getSidLastActTime() - override fun getIsInitialized(): Boolean = - userSettingsDataSource.getIsInitialized() - - override fun updateIsInitialized(value: Boolean) { - userSettingsDataSource.setIsInitialized(value) - } - override fun addParams( params: JSONObject, notificationSource: NotificationSource? diff --git a/personalization-sdk/src/main/kotlin/com/personalization/sdk/domain/repositories/UserSettingsRepository.kt b/personalization-sdk/src/main/kotlin/com/personalization/sdk/domain/repositories/UserSettingsRepository.kt index 31ba9dc3..c724dbed 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/sdk/domain/repositories/UserSettingsRepository.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/sdk/domain/repositories/UserSettingsRepository.kt @@ -21,9 +21,6 @@ interface UserSettingsRepository { fun updateSidLastActTime() fun getSidLastActTime(): Long - fun getIsInitialized(): Boolean - fun updateIsInitialized(value: Boolean) - fun addParams( params: JSONObject, notificationSource: NotificationSource?, diff --git a/personalization-sdk/src/main/kotlin/com/personalization/sdk/domain/usecases/userSettings/GetUserSettingsValueUseCase.kt b/personalization-sdk/src/main/kotlin/com/personalization/sdk/domain/usecases/userSettings/GetUserSettingsValueUseCase.kt index 48010aea..9d8c6e3c 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/sdk/domain/usecases/userSettings/GetUserSettingsValueUseCase.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/sdk/domain/usecases/userSettings/GetUserSettingsValueUseCase.kt @@ -14,6 +14,4 @@ class GetUserSettingsValueUseCase @Inject constructor( fun getSid(): String = userSettingsRepository.getSid() fun getSidLastActTime(): Long = userSettingsRepository.getSidLastActTime() - - fun getIsInitialized(): Boolean = userSettingsRepository.getIsInitialized() } diff --git a/personalization-sdk/src/main/kotlin/com/personalization/sdk/domain/usecases/userSettings/UpdateUserSettingsValueUseCase.kt b/personalization-sdk/src/main/kotlin/com/personalization/sdk/domain/usecases/userSettings/UpdateUserSettingsValueUseCase.kt index 4966e921..272c92a9 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/sdk/domain/usecases/userSettings/UpdateUserSettingsValueUseCase.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/sdk/domain/usecases/userSettings/UpdateUserSettingsValueUseCase.kt @@ -12,6 +12,4 @@ class UpdateUserSettingsValueUseCase @Inject constructor( fun updateSid(value: String) = userSettingsRepository.updateSid(value) fun updateSidLastActTime() = userSettingsRepository.updateSidLastActTime() - - fun updateIsInitialized(value: Boolean) = userSettingsRepository.updateIsInitialized(value) } From ba83c2b7762d9c418601409845091236c685dd81 Mon Sep 17 00:00:00 2001 From: Valeriy Date: Thu, 9 Jan 2025 14:48:33 +0300 Subject: [PATCH 10/13] refactor(UserSettingDataSource): Removed UserSettingsDataSource classes Logic from UserSettingsDataSource moved directly into UserSettingsRepository. All basic user parameters (shop_id, seance, segment, did, sid) goes through SharedPreferences. --- .../main/kotlin/com/personalization/SDK.kt | 5 +- .../sdk/data/di/DataSourcesModule.kt | 27 ----- .../sdk/data/models/params/UserBasicParams.kt | 12 ++ .../data/models/params/UserSettingsParams.kt | 15 --- .../network/NetworkRepositoryImpl.kt | 25 +++- .../preferences/PreferencesDataSource.kt | 2 - .../preferences/PreferencesDataSourceImpl.kt | 10 -- .../preferences/PreferencesRepositoryImpl.kt | 2 - .../userSettings/UserSettingsDataSource.kt | 23 ---- .../UserSettingsDataSourceImpl.kt | 58 --------- .../UserSettingsRepositoryImpl.kt | 111 ++++++++++++------ .../repositories/PreferencesRepository.kt | 2 - .../repositories/UserSettingsRepository.kt | 21 ++-- .../preferences/GetPreferencesValueUseCase.kt | 2 - .../GetUserSettingsValueUseCase.kt | 2 + .../userSettings/InitUserSettingsUseCase.kt | 11 +- 16 files changed, 127 insertions(+), 201 deletions(-) create mode 100644 personalization-sdk/src/main/kotlin/com/personalization/sdk/data/models/params/UserBasicParams.kt delete mode 100644 personalization-sdk/src/main/kotlin/com/personalization/sdk/data/models/params/UserSettingsParams.kt delete mode 100644 personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsDataSource.kt delete mode 100644 personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsDataSourceImpl.kt diff --git a/personalization-sdk/src/main/kotlin/com/personalization/SDK.kt b/personalization-sdk/src/main/kotlin/com/personalization/SDK.kt index fd4d3352..21012861 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/SDK.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/SDK.kt @@ -40,7 +40,6 @@ import javax.inject.Inject open class SDK { internal lateinit var context: Context - private lateinit var segment: String private var onMessageListener: OnMessageListener? = null private var search: Search = Search(JSONObject()) @@ -137,13 +136,11 @@ open class SDK { context = context, preferencesKey = preferencesKey ) - segment = getPreferencesValueUseCase.getSegment() notificationHandler.initialize(context = context) initUserSettingsUseCase.invoke( shopId = shopId, - segment = segment, stream = stream ) @@ -662,7 +659,7 @@ open class SDK { /** * Returns the current segment for A/B testing */ - fun getSegment(): String = instance.segment + fun getSegment(): String = getUserSettingsValueUseCase.getSegmentForABTesting() /** * Add user to a segment diff --git a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/di/DataSourcesModule.kt b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/di/DataSourcesModule.kt index d03e6272..26214bf0 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/di/DataSourcesModule.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/di/DataSourcesModule.kt @@ -6,13 +6,9 @@ import com.personalization.sdk.data.repositories.preferences.PreferencesDataSour import com.personalization.sdk.data.repositories.preferences.PreferencesDataSourceImpl import com.personalization.sdk.data.repositories.recommendation.RecommendationDataSource import com.personalization.sdk.data.repositories.recommendation.RecommendationDataSourceImpl -import com.personalization.sdk.data.repositories.userSettings.UserSettingsDataSource -import com.personalization.sdk.data.repositories.userSettings.UserSettingsDataSourceImpl import dagger.Binds import dagger.Module import dagger.Provides -import dagger.assisted.Assisted -import dagger.assisted.AssistedFactory import javax.inject.Singleton @Module @@ -34,28 +30,5 @@ interface DataSourcesModule { ): NotificationDataSource = NotificationDataSourceImpl( preferencesDataSource = preferencesDataSource ) - - @Provides - @Singleton - fun provideUserSettingsDataSource( - preferencesDataSource: PreferencesDataSource, - shopId: String, - segment: String, - stream: String - ): UserSettingsDataSource = UserSettingsDataSourceImpl( - preferencesDataSource = preferencesDataSource, - shopId = shopId, - segment = segment, - stream = stream - ) } } - -@AssistedFactory -interface UserSettingsDataSourceFactory { - fun create( - @Assisted("shopId") shopId: String, - @Assisted("segment") segment: String, - @Assisted("stream") stream: String - ): UserSettingsDataSourceImpl -} diff --git a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/models/params/UserBasicParams.kt b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/models/params/UserBasicParams.kt new file mode 100644 index 00000000..9220b620 --- /dev/null +++ b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/models/params/UserBasicParams.kt @@ -0,0 +1,12 @@ +package com.personalization.sdk.data.models.params + +object UserBasicParams { + const val SHOP_ID = "shop_id" + const val DID = "did" + const val SEANCE = "seance" + const val SID = "sid" + const val SEGMENT = "segment" + const val STREAM = "stream" + const val SOURCE_FROM = "from" + const val SOURCE_CODE = "code" +} diff --git a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/models/params/UserSettingsParams.kt b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/models/params/UserSettingsParams.kt deleted file mode 100644 index 19634fd1..00000000 --- a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/models/params/UserSettingsParams.kt +++ /dev/null @@ -1,15 +0,0 @@ -package com.personalization.sdk.data.models.params - -class UserSettingsParams { - companion object { - const val SHOP_ID = "shop_id" - const val DID = "did" - const val SEANCE = "seance" - const val SID = "sid" - const val SEGMENT = "segment" - const val STREAM = "stream" - const val SOURCE = "source" - const val SOURCE_FROM = "from" - const val SOURCE_CODE = "code" - } -} diff --git a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/network/NetworkRepositoryImpl.kt b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/network/NetworkRepositoryImpl.kt index 27d15a76..c7ea37a6 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/network/NetworkRepositoryImpl.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/network/NetworkRepositoryImpl.kt @@ -3,7 +3,10 @@ package com.personalization.sdk.data.repositories.network import android.net.Uri import com.personalization.SDK import com.personalization.api.OnApiCallbackListener +import com.personalization.sdk.data.models.params.UserBasicParams +import com.personalization.sdk.data.utils.QueryParamsUtils.addMultipleParams import com.personalization.sdk.domain.models.NetworkMethod +import com.personalization.sdk.domain.models.NotificationSource import com.personalization.sdk.domain.repositories.NetworkRepository import com.personalization.sdk.domain.repositories.NotificationRepository import com.personalization.sdk.domain.repositories.UserSettingsRepository @@ -165,7 +168,7 @@ class NetworkRepositoryImpl @Inject constructor( notificationRepository.getNotificationSource(TimeUtils.TWO_DAYS.inWholeMilliseconds) try { - val newParams = userSettingsRepository.addParams( + val newParams = addBasicQueryParams( params = params, notificationSource = notificationSource, ) @@ -176,6 +179,26 @@ class NetworkRepositoryImpl @Inject constructor( } } + private fun addBasicQueryParams( + params: JSONObject, + notificationSource: NotificationSource? + ): JSONObject { + addMultipleParams( + params = params, + paramsToAdd = mapOf( + UserBasicParams.SHOP_ID to userSettingsRepository.getShopId(), + UserBasicParams.DID to userSettingsRepository.getDid(), + UserBasicParams.SID to userSettingsRepository.getSid(), + UserBasicParams.SEANCE to userSettingsRepository.getSid(), + UserBasicParams.SEGMENT to userSettingsRepository.getSegmentForABTesting(), + UserBasicParams.STREAM to userSettingsRepository.getStream(), + UserBasicParams.SOURCE_FROM to notificationSource?.type, + UserBasicParams.SOURCE_CODE to notificationSource?.id + ) + ) + return params + } + private fun executeMethod( networkMethod: NetworkMethod, params: JSONObject, diff --git a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/preferences/PreferencesDataSource.kt b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/preferences/PreferencesDataSource.kt index 55c87e79..3f032e45 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/preferences/PreferencesDataSource.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/preferences/PreferencesDataSource.kt @@ -17,8 +17,6 @@ interface PreferencesDataSource { fun saveLastPushTokenDate(value: Long) - fun getSegment(): String - fun getValue(field: String, defaultValue: String): String fun getValue(field: String, defaultValue: Long): Long diff --git a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/preferences/PreferencesDataSourceImpl.kt b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/preferences/PreferencesDataSourceImpl.kt index 18cf15bc..d226b30f 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/preferences/PreferencesDataSourceImpl.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/preferences/PreferencesDataSourceImpl.kt @@ -7,11 +7,9 @@ import javax.inject.Singleton private const val DEFAULT_TOKEN = "" private const val DEFAULT_LAST_PUSH_TOKEN_DATE = 0L -private val DEFAULT_SEGMENT = arrayOf("A", "B").random() private const val TOKEN_KEY = "token" private const val LAST_PUSH_TOKEN_DATE_KEY = "last_push_token_date" -private const val SEGMENT_KEY = ".segment" @Singleton class PreferencesDataSourceImpl @Inject constructor() : PreferencesDataSource { @@ -44,14 +42,6 @@ class PreferencesDataSourceImpl @Inject constructor() : PreferencesDataSource { ) } - override fun getSegment(): String { - val field = preferencesKey + SEGMENT_KEY - return getValue( - field = field, - defaultValue = DEFAULT_SEGMENT - ) - } - override fun getValue(field: String, defaultValue: String): String { return sharedPreferences?.getString(field, defaultValue) ?: defaultValue } diff --git a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/preferences/PreferencesRepositoryImpl.kt b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/preferences/PreferencesRepositoryImpl.kt index 5809e777..8644104a 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/preferences/PreferencesRepositoryImpl.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/preferences/PreferencesRepositoryImpl.kt @@ -25,6 +25,4 @@ class PreferencesRepositoryImpl @Inject constructor( override fun saveLastPushTokenDate(value: Long) { preferencesDataSource.saveLastPushTokenDate(value) } - - override fun getSegment(): String = preferencesDataSource.getSegment() } diff --git a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsDataSource.kt b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsDataSource.kt deleted file mode 100644 index e98dc279..00000000 --- a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsDataSource.kt +++ /dev/null @@ -1,23 +0,0 @@ -package com.personalization.sdk.data.repositories.userSettings - -import com.personalization.sdk.domain.models.NotificationSource -import org.json.JSONObject - -interface UserSettingsDataSource { - - fun addParams( - params: JSONObject, - notificationSource: NotificationSource?, - ): JSONObject - - fun getSidLastActTime(): Long - - fun saveSidLastActTime(value: Long) - - fun getSid(): String - fun saveSid(value: String) - - fun getDid(): String - fun saveDid(value: String) - fun removeDid() -} diff --git a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsDataSourceImpl.kt b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsDataSourceImpl.kt deleted file mode 100644 index 01bcdde4..00000000 --- a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsDataSourceImpl.kt +++ /dev/null @@ -1,58 +0,0 @@ -package com.personalization.sdk.data.repositories.userSettings - -import com.personalization.sdk.data.models.params.UserSettingsParams -import com.personalization.sdk.data.repositories.preferences.PreferencesDataSource -import com.personalization.sdk.data.utils.QueryParamsUtils.addMultipleParams -import com.personalization.sdk.domain.models.NotificationSource -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject -import org.json.JSONObject - -private const val DEFAULT_DID = "" -private const val DEFAULT_SID = "" -private const val DEFAULT_SID_LAST_ACT_TIME = 0L - -private const val DID_KEY = "did" -private const val SID_KEY = "sid" -private const val SID_LAST_ACT_KEY = "sid_last_act" - -class UserSettingsDataSourceImpl @AssistedInject constructor( - private val preferencesDataSource: PreferencesDataSource, - @Assisted("shopId") private val shopId: String, - @Assisted("segment") private val segment: String, - @Assisted("stream") private val stream: String -) : UserSettingsDataSource { - - override fun addParams( - params: JSONObject, - notificationSource: NotificationSource?, - ): JSONObject { - addMultipleParams( - params = params, - paramsToAdd = mapOf( - UserSettingsParams.SHOP_ID to shopId, - UserSettingsParams.DID to getDid(), - UserSettingsParams.SID to getSid(), - UserSettingsParams.SEANCE to getSid(), - UserSettingsParams.SEGMENT to segment, - UserSettingsParams.STREAM to stream, - UserSettingsParams.SOURCE_FROM to notificationSource?.type, - UserSettingsParams.SOURCE_CODE to notificationSource?.id - ) - ) - return params - } - - override fun getSidLastActTime(): Long = - preferencesDataSource.getValue(SID_LAST_ACT_KEY, DEFAULT_SID_LAST_ACT_TIME) - - override fun saveSidLastActTime(value: Long) = - preferencesDataSource.saveValue(SID_LAST_ACT_KEY, value) - - override fun getSid(): String = preferencesDataSource.getValue(SID_KEY, DEFAULT_SID) - override fun saveSid(value: String) = preferencesDataSource.saveValue(SID_KEY, value) - - override fun getDid(): String = preferencesDataSource.getValue(DID_KEY, DEFAULT_DID) - override fun saveDid(value: String) = preferencesDataSource.saveValue(DID_KEY, value) - override fun removeDid() = preferencesDataSource.removeValue(DID_KEY) -} diff --git a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsRepositoryImpl.kt b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsRepositoryImpl.kt index b0f98126..9bf10f92 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsRepositoryImpl.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsRepositoryImpl.kt @@ -1,63 +1,102 @@ package com.personalization.sdk.data.repositories.userSettings -import com.personalization.sdk.data.di.UserSettingsDataSourceFactory -import com.personalization.sdk.domain.models.NotificationSource +import com.personalization.sdk.data.repositories.preferences.PreferencesDataSource import com.personalization.sdk.domain.repositories.UserSettingsRepository -import org.json.JSONObject import javax.inject.Inject +private const val DEFAULT_DID = "" +private const val DEFAULT_SID = "" +private const val DEFAULT_SID_LAST_ACT_TIME = 0L +private const val DEFAULT_SHOP_ID = "" +private const val DEFAULT_STREAM = "android" + +private const val DID_KEY = "did" +private const val SID_KEY = "sid" +private const val SID_LAST_ACT_KEY = "sid_last_act" +private const val SHOP_ID_KEY = "shop_id" +private const val SEGMENT_AB_TESTING_KEY = "segment_ab_testing" +private const val STREAM_KEY = "stream" + class UserSettingsRepositoryImpl @Inject constructor( - private val userSettingsDataSourceFactory: UserSettingsDataSourceFactory, + private val preferencesDataSource: PreferencesDataSource, ) : UserSettingsRepository { - private lateinit var userSettingsDataSource: UserSettingsDataSourceImpl - - override fun initialize( - shopId: String, - segment: String, - stream: String - ) { - userSettingsDataSource = userSettingsDataSourceFactory.create( - shopId = shopId, - segment = segment, - stream = stream + override fun getDid(): String = preferencesDataSource.getValue( + field = DID_KEY, + defaultValue = DEFAULT_DID + ) + + override fun updateDid(value: String) { + preferencesDataSource.saveValue( + field = SID_KEY, + value = value ) } - override fun getDid(): String { - return userSettingsDataSource.getDid() + override fun removeDid() { + preferencesDataSource.removeValue(field = DID_KEY) } - override fun updateDid(value: String) { - userSettingsDataSource.saveDid(value) - } + override fun getSid(): String = preferencesDataSource.getValue( + field = SID_KEY, + defaultValue = DEFAULT_SID + ) override fun updateSid(value: String) { - userSettingsDataSource.saveSid(value) + preferencesDataSource.saveValue( + field = SID_KEY, + value = value + ) updateSidLastActTime() } - override fun getSid(): String { - return userSettingsDataSource.getSid() + override fun getSidLastActTime(): Long = preferencesDataSource.getValue( + field = SID_LAST_ACT_KEY, + defaultValue = DEFAULT_SID_LAST_ACT_TIME + ) + + override fun updateSidLastActTime() { + preferencesDataSource.saveValue( + field = SID_LAST_ACT_KEY, + value = System.currentTimeMillis() + ) } - override fun removeDid() { - userSettingsDataSource.removeDid() + override fun getShopId(): String = preferencesDataSource.getValue( + field = SHOP_ID_KEY, + defaultValue = DEFAULT_SHOP_ID + ) + + override fun updateShopId(value: String) { + preferencesDataSource.saveValue( + field = SHOP_ID_KEY, + value = value + ) } - override fun updateSidLastActTime() { - userSettingsDataSource.saveSidLastActTime(System.currentTimeMillis()) + override fun getSegmentForABTesting(): String = preferencesDataSource.getValue( + field = SEGMENT_AB_TESTING_KEY, + defaultValue = generateRandomSegmentValue() + ) + + override fun updateSegmentForABTesting() { + preferencesDataSource.saveValue( + field = SEGMENT_AB_TESTING_KEY, + value = generateRandomSegmentValue() + ) } - override fun getSidLastActTime(): Long = - userSettingsDataSource.getSidLastActTime() + override fun getStream(): String = preferencesDataSource.getValue( + field = STREAM_KEY, + defaultValue = DEFAULT_STREAM + ) - override fun addParams( - params: JSONObject, - notificationSource: NotificationSource? - ): JSONObject = - userSettingsDataSource.addParams( - params = params, - notificationSource = notificationSource, + override fun updateStream(value: String) { + preferencesDataSource.saveValue( + field = STREAM_KEY, + value = value ) + } + + private fun generateRandomSegmentValue(): String = arrayOf("A", "B").random() } diff --git a/personalization-sdk/src/main/kotlin/com/personalization/sdk/domain/repositories/PreferencesRepository.kt b/personalization-sdk/src/main/kotlin/com/personalization/sdk/domain/repositories/PreferencesRepository.kt index 0c1f8ed0..39bef490 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/sdk/domain/repositories/PreferencesRepository.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/sdk/domain/repositories/PreferencesRepository.kt @@ -14,6 +14,4 @@ interface PreferencesRepository { fun getLastPushTokenDate(): Long fun saveLastPushTokenDate(value: Long) - - fun getSegment(): String } diff --git a/personalization-sdk/src/main/kotlin/com/personalization/sdk/domain/repositories/UserSettingsRepository.kt b/personalization-sdk/src/main/kotlin/com/personalization/sdk/domain/repositories/UserSettingsRepository.kt index c724dbed..cefee887 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/sdk/domain/repositories/UserSettingsRepository.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/sdk/domain/repositories/UserSettingsRepository.kt @@ -1,16 +1,7 @@ package com.personalization.sdk.domain.repositories -import com.personalization.sdk.domain.models.NotificationSource -import org.json.JSONObject - interface UserSettingsRepository { - fun initialize( - shopId: String, - segment: String, - stream: String - ) - fun getDid(): String fun removeDid() fun updateDid(value: String) @@ -21,8 +12,12 @@ interface UserSettingsRepository { fun updateSidLastActTime() fun getSidLastActTime(): Long - fun addParams( - params: JSONObject, - notificationSource: NotificationSource?, - ): JSONObject + fun getShopId(): String + fun updateShopId(value: String) + + fun getSegmentForABTesting(): String + fun updateSegmentForABTesting() + + fun getStream(): String + fun updateStream(value: String) } diff --git a/personalization-sdk/src/main/kotlin/com/personalization/sdk/domain/usecases/preferences/GetPreferencesValueUseCase.kt b/personalization-sdk/src/main/kotlin/com/personalization/sdk/domain/usecases/preferences/GetPreferencesValueUseCase.kt index 4e72c48c..e3295f8d 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/sdk/domain/usecases/preferences/GetPreferencesValueUseCase.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/sdk/domain/usecases/preferences/GetPreferencesValueUseCase.kt @@ -10,6 +10,4 @@ class GetPreferencesValueUseCase @Inject constructor( fun getToken(): String = preferencesRepository.getToken() fun getLastPushTokenDate(): Long = preferencesRepository.getLastPushTokenDate() - - fun getSegment(): String = preferencesRepository.getSegment() } diff --git a/personalization-sdk/src/main/kotlin/com/personalization/sdk/domain/usecases/userSettings/GetUserSettingsValueUseCase.kt b/personalization-sdk/src/main/kotlin/com/personalization/sdk/domain/usecases/userSettings/GetUserSettingsValueUseCase.kt index 9d8c6e3c..6da21805 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/sdk/domain/usecases/userSettings/GetUserSettingsValueUseCase.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/sdk/domain/usecases/userSettings/GetUserSettingsValueUseCase.kt @@ -14,4 +14,6 @@ class GetUserSettingsValueUseCase @Inject constructor( fun getSid(): String = userSettingsRepository.getSid() fun getSidLastActTime(): Long = userSettingsRepository.getSidLastActTime() + + fun getSegmentForABTesting(): String = userSettingsRepository.getSegmentForABTesting() } diff --git a/personalization-sdk/src/main/kotlin/com/personalization/sdk/domain/usecases/userSettings/InitUserSettingsUseCase.kt b/personalization-sdk/src/main/kotlin/com/personalization/sdk/domain/usecases/userSettings/InitUserSettingsUseCase.kt index 2267c8d6..bb1cdb02 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/sdk/domain/usecases/userSettings/InitUserSettingsUseCase.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/sdk/domain/usecases/userSettings/InitUserSettingsUseCase.kt @@ -9,13 +9,12 @@ class InitUserSettingsUseCase @Inject constructor( fun invoke( shopId: String, - segment: String, stream: String ) { - userSettingsRepository.initialize( - shopId = shopId, - segment = segment, - stream = stream - ) + userSettingsRepository.updateShopId(value = shopId) + + userSettingsRepository.updateSegmentForABTesting() + + userSettingsRepository.updateStream(value = stream) } } From 6a588639d1e1cacea27bda588eaeee8f2c45a8d0 Mon Sep 17 00:00:00 2001 From: Valeriy Date: Fri, 10 Jan 2025 17:46:34 +0300 Subject: [PATCH 11/13] fix(UserSettingsRepositoryImpl): Fix key for saving did with SharedPref Logic from UserSettingsDataSource moved directly into UserSettingsRepository. All basic user parameters (shop_id, seance, segment, did, sid) goes through SharedPreferences. --- .../repositories/userSettings/UserSettingsRepositoryImpl.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsRepositoryImpl.kt b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsRepositoryImpl.kt index 9bf10f92..abdec68f 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsRepositoryImpl.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsRepositoryImpl.kt @@ -28,7 +28,7 @@ class UserSettingsRepositoryImpl @Inject constructor( override fun updateDid(value: String) { preferencesDataSource.saveValue( - field = SID_KEY, + field = DID_KEY, value = value ) } From 7d909e01294fdd8ce51d05708d3943d465758b73 Mon Sep 17 00:00:00 2001 From: Valeriy Date: Fri, 10 Jan 2025 20:58:14 +0300 Subject: [PATCH 12/13] refactor: Conflict resolving after merging master --- .../userSettings/UserSettingsDataSource.kt | 0 .../userSettings/UserSettingsRepositoryImpl.kt | 14 +++++++++++--- .../domain/repositories/UserSettingsRepository.kt | 2 +- .../userSettings/InitializeAdvertisingIdUseCase.kt | 2 +- 4 files changed, 13 insertions(+), 5 deletions(-) delete mode 100644 personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsDataSource.kt diff --git a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsDataSource.kt b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsDataSource.kt deleted file mode 100644 index e69de29b..00000000 diff --git a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsRepositoryImpl.kt b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsRepositoryImpl.kt index 7a150e10..6372423d 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsRepositoryImpl.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsRepositoryImpl.kt @@ -9,6 +9,7 @@ private const val DEFAULT_SID = "" private const val DEFAULT_SID_LAST_ACT_TIME = 0L private const val DEFAULT_SHOP_ID = "" private const val DEFAULT_STREAM = "android" +private const val DEFAULT_ADVERTISING_ID = "00000000-0000-0000-0000-000000000000" private const val DID_KEY = "did" private const val SID_KEY = "sid" @@ -16,6 +17,7 @@ private const val SID_LAST_ACT_KEY = "sid_last_act" private const val SHOP_ID_KEY = "shop_id" private const val SEGMENT_AB_TESTING_KEY = "segment_ab_testing" private const val STREAM_KEY = "stream" +private const val ADVERTISING_ID_KEY = "google_ad_id" class UserSettingsRepositoryImpl @Inject constructor( private val preferencesDataSource: PreferencesDataSource, @@ -98,11 +100,17 @@ class UserSettingsRepositoryImpl @Inject constructor( ) } - override fun saveAdvertisingId(value: String) { + override fun getAdvertisingId(): String = preferencesDataSource.getValue( + field = ADVERTISING_ID_KEY, + defaultValue = DEFAULT_ADVERTISING_ID + ) + override fun updateAdvertisingId(value: String) { + preferencesDataSource.saveValue( + field = ADVERTISING_ID_KEY, + value = value + ) } - override fun getAdvertisingId(): String = - private fun generateRandomSegmentValue(): String = arrayOf("A", "B").random() } diff --git a/personalization-sdk/src/main/kotlin/com/personalization/sdk/domain/repositories/UserSettingsRepository.kt b/personalization-sdk/src/main/kotlin/com/personalization/sdk/domain/repositories/UserSettingsRepository.kt index 178f371a..be3db4fd 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/sdk/domain/repositories/UserSettingsRepository.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/sdk/domain/repositories/UserSettingsRepository.kt @@ -21,6 +21,6 @@ interface UserSettingsRepository { fun getStream(): String fun updateStream(value: String) - fun saveAdvertisingId(value: String) fun getAdvertisingId(): String + fun updateAdvertisingId(value: String) } diff --git a/personalization-sdk/src/main/kotlin/com/personalization/sdk/domain/usecases/userSettings/InitializeAdvertisingIdUseCase.kt b/personalization-sdk/src/main/kotlin/com/personalization/sdk/domain/usecases/userSettings/InitializeAdvertisingIdUseCase.kt index d31b4dd1..00310221 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/sdk/domain/usecases/userSettings/InitializeAdvertisingIdUseCase.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/sdk/domain/usecases/userSettings/InitializeAdvertisingIdUseCase.kt @@ -10,6 +10,6 @@ internal class InitializeAdvertisingIdUseCase @Inject constructor( ) { suspend fun invoke() { val advertisingId = advertisingRepository.fetchAdvertisingId() - userSettingsRepository.saveAdvertisingId(advertisingId) + userSettingsRepository.updateAdvertisingId(advertisingId) } } From 66d6416ecd177c583f9606fdb967504d486cdb9e Mon Sep 17 00:00:00 2001 From: Valeriy Date: Fri, 10 Jan 2025 22:44:51 +0300 Subject: [PATCH 13/13] refactor(defaultAdvertisingId): extract creating defaultAdvertisingId into separate Util property --- ...gRepositoryImpl.kt => Advertising.repository.impl.kt} | 9 ++------- ...RepositoryImpl.kt => UserSettings.repository.impl.kt} | 4 ++-- .../personalization/sdk/data/utils/Advertising.utils.kt | 8 ++++++++ 3 files changed, 12 insertions(+), 9 deletions(-) rename personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/advertising/{AdvertisingRepositoryImpl.kt => Advertising.repository.impl.kt} (76%) rename personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/{UserSettingsRepositoryImpl.kt => UserSettings.repository.impl.kt} (96%) create mode 100644 personalization-sdk/src/main/kotlin/com/personalization/sdk/data/utils/Advertising.utils.kt diff --git a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/advertising/AdvertisingRepositoryImpl.kt b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/advertising/Advertising.repository.impl.kt similarity index 76% rename from personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/advertising/AdvertisingRepositoryImpl.kt rename to personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/advertising/Advertising.repository.impl.kt index 62130e99..8282074a 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/advertising/AdvertisingRepositoryImpl.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/advertising/Advertising.repository.impl.kt @@ -2,8 +2,8 @@ package com.personalization.sdk.data.repositories.advertising import android.content.Context import com.google.android.gms.ads.identifier.AdvertisingIdClient +import com.personalization.sdk.data.utils.AdvertisingUtils import com.personalization.sdk.domain.repositories.AdvertisingRepository -import java.util.UUID import javax.inject.Inject class AdvertisingRepositoryImpl @Inject constructor( @@ -13,11 +13,6 @@ class AdvertisingRepositoryImpl @Inject constructor( try { AdvertisingIdClient.getAdvertisingIdInfo(context).id } catch (e: Exception) { - generateDefaultAdvertisingId() + AdvertisingUtils.DEFAULT_ADVERTISING_ID } - - private fun generateDefaultAdvertisingId(): String { - return UUID(0L, 0L).toString() - } - } diff --git a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsRepositoryImpl.kt b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettings.repository.impl.kt similarity index 96% rename from personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsRepositoryImpl.kt rename to personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettings.repository.impl.kt index 6372423d..8659b911 100644 --- a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettingsRepositoryImpl.kt +++ b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/repositories/userSettings/UserSettings.repository.impl.kt @@ -1,6 +1,7 @@ package com.personalization.sdk.data.repositories.userSettings import com.personalization.sdk.data.repositories.preferences.PreferencesDataSource +import com.personalization.sdk.data.utils.AdvertisingUtils import com.personalization.sdk.domain.repositories.UserSettingsRepository import javax.inject.Inject @@ -9,7 +10,6 @@ private const val DEFAULT_SID = "" private const val DEFAULT_SID_LAST_ACT_TIME = 0L private const val DEFAULT_SHOP_ID = "" private const val DEFAULT_STREAM = "android" -private const val DEFAULT_ADVERTISING_ID = "00000000-0000-0000-0000-000000000000" private const val DID_KEY = "did" private const val SID_KEY = "sid" @@ -102,7 +102,7 @@ class UserSettingsRepositoryImpl @Inject constructor( override fun getAdvertisingId(): String = preferencesDataSource.getValue( field = ADVERTISING_ID_KEY, - defaultValue = DEFAULT_ADVERTISING_ID + defaultValue = AdvertisingUtils.DEFAULT_ADVERTISING_ID ) override fun updateAdvertisingId(value: String) { diff --git a/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/utils/Advertising.utils.kt b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/utils/Advertising.utils.kt new file mode 100644 index 00000000..6eb1a5ba --- /dev/null +++ b/personalization-sdk/src/main/kotlin/com/personalization/sdk/data/utils/Advertising.utils.kt @@ -0,0 +1,8 @@ +package com.personalization.sdk.data.utils + +import java.util.UUID + +object AdvertisingUtils { + + val DEFAULT_ADVERTISING_ID = UUID(0L, 0L).toString() +} \ No newline at end of file