From 2ffe05e93a1267a8dde31dcfe17eba700ae4205b Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 13 Aug 2024 11:32:26 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../datasource/api/common/config/ApiConfig.kt | 15 +++----- .../datasource/api/common/config/Express.kt | 14 +++----- .../api/common/config/TangemTech.kt | 12 +++---- .../config/managers/DevApiConfigsManager.kt | 35 +++++++++---------- .../managers/MutableApiConfigsManager.kt | 4 +-- .../config/managers/ProdApiConfigsManager.kt | 4 +-- .../EnvironmentsTogglesViewModel.kt | 10 +++--- 7 files changed, 39 insertions(+), 55 deletions(-) diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/common/config/ApiConfig.kt b/core/datasource/src/main/java/com/tangem/datasource/api/common/config/ApiConfig.kt index 7c5b88f27a..ba2cc575a9 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/common/config/ApiConfig.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/common/config/ApiConfig.kt @@ -3,13 +3,14 @@ package com.tangem.datasource.api.common.config /** * Api config * - * @property currentEnvironment current api environment - * * @see API configuration * [REDACTED_AUTHOR] */ -sealed class ApiConfig(open val currentEnvironment: ApiEnvironment) { +sealed class ApiConfig { + + /** Default environment */ + abstract val defaultEnvironment: ApiEnvironment /** Available environments with base url */ abstract val environments: Map @@ -22,14 +23,6 @@ sealed class ApiConfig(open val currentEnvironment: ApiEnvironment) { TangemTech, } - /** Copy method for sealed class [ApiConfig] */ - fun copySealed(currentEnvironment: ApiEnvironment): ApiConfig { - return when (this) { - is Express -> copy(currentEnvironment = currentEnvironment) - is TangemTech -> copy(currentEnvironment = currentEnvironment) - } - } - private fun initializeId(): ID { return when (this) { is Express -> ID.Express diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/common/config/Express.kt b/core/datasource/src/main/java/com/tangem/datasource/api/common/config/Express.kt index 5ebf06c017..be5bba3816 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/common/config/Express.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/common/config/Express.kt @@ -2,14 +2,10 @@ package com.tangem.datasource.api.common.config import com.tangem.datasource.BuildConfig -/** - * Express [ApiConfig] - * - * @property currentEnvironment current api environment - */ -internal data class Express( - override val currentEnvironment: ApiEnvironment = initializeCurrentEnvironment(), -) : ApiConfig(currentEnvironment) { +/** Express [ApiConfig] */ +internal class Express : ApiConfig() { + + override val defaultEnvironment: ApiEnvironment = getInitialEnvironment() override val environments: Map = mapOf( ApiEnvironment.DEV to "[REDACTED_ENV_URL]", @@ -19,7 +15,7 @@ internal data class Express( private companion object { - fun initializeCurrentEnvironment(): ApiEnvironment { + fun getInitialEnvironment(): ApiEnvironment { return when (BuildConfig.BUILD_TYPE) { DEBUG_BUILD_TYPE -> ApiEnvironment.DEV INTERNAL_BUILD_TYPE, diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/common/config/TangemTech.kt b/core/datasource/src/main/java/com/tangem/datasource/api/common/config/TangemTech.kt index b986870d0c..b1491bb852 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/common/config/TangemTech.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/common/config/TangemTech.kt @@ -1,13 +1,9 @@ package com.tangem.datasource.api.common.config -/** - * TangemTech [ApiConfig] - * - * @property currentEnvironment current api environment - */ -internal data class TangemTech( - override val currentEnvironment: ApiEnvironment = ApiEnvironment.PROD, -) : ApiConfig(currentEnvironment) { +/** TangemTech [ApiConfig] */ +internal class TangemTech : ApiConfig() { + + override val defaultEnvironment: ApiEnvironment = ApiEnvironment.PROD override val environments: Map = mapOf( ApiEnvironment.DEV to "https://devapi.tangem-tech.com/v1/", diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/common/config/managers/DevApiConfigsManager.kt b/core/datasource/src/main/java/com/tangem/datasource/api/common/config/managers/DevApiConfigsManager.kt index 0af38d7ba9..5a1c92008d 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/common/config/managers/DevApiConfigsManager.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/common/config/managers/DevApiConfigsManager.kt @@ -7,10 +7,7 @@ import com.tangem.datasource.local.preferences.PreferencesKeys import com.tangem.datasource.local.preferences.utils.getObjectMap import com.tangem.utils.coroutines.CoroutineDispatcherProvider import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.launchIn -import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.flow.* /** * Implementation of [ApiConfigsManager] in DEV environment @@ -23,9 +20,9 @@ internal class DevApiConfigsManager( private val dispatchers: CoroutineDispatcherProvider, ) : MutableApiConfigsManager { - override val configs: Flow> get() = _apiConfigs + override val configs: Flow> get() = _apiConfigs - private val _apiConfigs = MutableStateFlow(value = ApiConfig.values()) + private val _apiConfigs = MutableStateFlow(value = ApiConfig.values().associateWith { it.defaultEnvironment }) override suspend fun initialize() { // We can't use appPreferencesStore.getObjectMap as base flow, @@ -33,13 +30,11 @@ internal class DevApiConfigsManager( // See [getBaseUrl] appPreferencesStore.getObjectMap(PreferencesKeys.apiConfigsEnvironmentKey) .onEach { savedEnvironments -> - _apiConfigs.value = _apiConfigs.value.map { config -> - val savedEnvironment = savedEnvironments[config.id.name] + _apiConfigs.update { apiConfigs -> + apiConfigs.mapValues { + val (config, currentEnvironment) = it - if (savedEnvironment != null) { - config.copySealed(currentEnvironment = savedEnvironment) - } else { - config + savedEnvironments[config.id.name] ?: currentEnvironment } } } @@ -47,14 +42,16 @@ internal class DevApiConfigsManager( } override fun getBaseUrl(id: ApiConfig.ID): String { - val config = _apiConfigs.value.firstOrNull { it.id == id } - ?: error("Api config with id [$id] not found. Check ApiConfig implementations") + val apiConfigs = _apiConfigs.value - return config.environments[config.currentEnvironment] - ?: error( - "Api config with id [$id] doesn't contain environment [${config.currentEnvironment}]. " + - "Check ApiConfig implementations", - ) + val config = apiConfigs.map { it }.firstOrNull { it.key.id == id }?.key + ?: error("Api config with id [$id] not found") + + val currentEnvironment = apiConfigs[config] + ?: error("Current environment of api config with id [$id] not found") + + return config.environments[currentEnvironment] + ?: error("Api config with id [$id] doesn't contain environment [$currentEnvironment]") } override suspend fun changeEnvironment(id: String, environment: ApiEnvironment) { diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/common/config/managers/MutableApiConfigsManager.kt b/core/datasource/src/main/java/com/tangem/datasource/api/common/config/managers/MutableApiConfigsManager.kt index 87ec3f21fb..35107ad6d8 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/common/config/managers/MutableApiConfigsManager.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/common/config/managers/MutableApiConfigsManager.kt @@ -11,8 +11,8 @@ import kotlinx.coroutines.flow.Flow */ interface MutableApiConfigsManager : ApiConfigsManager { - /** Configs */ - val configs: Flow> + /** Api configs with current [ApiEnvironment] */ + val configs: Flow> /** Change api environment [environment] by [id] */ suspend fun changeEnvironment(id: String, environment: ApiEnvironment) diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/common/config/managers/ProdApiConfigsManager.kt b/core/datasource/src/main/java/com/tangem/datasource/api/common/config/managers/ProdApiConfigsManager.kt index 9f5e1e31e5..34a04a0053 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/common/config/managers/ProdApiConfigsManager.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/common/config/managers/ProdApiConfigsManager.kt @@ -9,10 +9,10 @@ internal class ProdApiConfigsManager : ApiConfigsManager { val config = ApiConfig.values().firstOrNull { it.id == id } ?: error("Api config with id [$id] not found. Check ApiConfig implementations") - return config.environments[config.currentEnvironment] + return config.environments[config.defaultEnvironment] ?: error( "Api config with id [$id] doesn't contain " + - "environment [${config.currentEnvironment}]. Check ApiConfig implementations", + "environment [${config.defaultEnvironment}]. Check ApiConfig implementations", ) } } \ No newline at end of file diff --git a/features/tester/impl/src/main/java/com/tangem/feature/tester/presentation/environments/viewmodels/EnvironmentsTogglesViewModel.kt b/features/tester/impl/src/main/java/com/tangem/feature/tester/presentation/environments/viewmodels/EnvironmentsTogglesViewModel.kt index 1b4b896c3e..84cfee3b6f 100644 --- a/features/tester/impl/src/main/java/com/tangem/feature/tester/presentation/environments/viewmodels/EnvironmentsTogglesViewModel.kt +++ b/features/tester/impl/src/main/java/com/tangem/feature/tester/presentation/environments/viewmodels/EnvironmentsTogglesViewModel.kt @@ -62,12 +62,14 @@ internal class EnvironmentsTogglesViewModel @Inject constructor( .launchIn(viewModelScope) } - private fun List.toUiModel(): ImmutableSet { - return map { config -> + private fun Map.toUiModel(): ImmutableSet { + return map { + val (config, currentEnvironment) = it + EnvironmentTogglesScreenUM.ApiInfoUM( name = config.id.name, - select = config.currentEnvironment.name, - url = config.environments[config.currentEnvironment] + select = currentEnvironment.name, + url = config.environments[currentEnvironment] ?: error("Current environment's url isn't found"), environments = config.environments .map { environment -> environment.key.name }