diff --git a/feature_coin_details/src/main/java/com/ryankoech/krypto/feature_coin_details/presentation/CoinDetailsScreen.kt b/feature_coin_details/src/main/java/com/ryankoech/krypto/feature_coin_details/presentation/CoinDetailsScreen.kt index df4db98..840ee7f 100644 --- a/feature_coin_details/src/main/java/com/ryankoech/krypto/feature_coin_details/presentation/CoinDetailsScreen.kt +++ b/feature_coin_details/src/main/java/com/ryankoech/krypto/feature_coin_details/presentation/CoinDetailsScreen.kt @@ -59,7 +59,7 @@ fun CoinDetailsScreen( try { viewState.dayMarketChart.toPairList().subList(0, 11) } catch (e : Throwable){ - Timber.d(e.localizedMessage) + Timber.w(e.localizedMessage) viewState.dayMarketChart.toPairList() } } @@ -71,7 +71,7 @@ fun CoinDetailsScreen( try { viewState.threeMonthMarketChart.toPairList().subList(0, 167) } catch (e : Throwable){ - Timber.d(e.localizedMessage) + Timber.w(e.localizedMessage) viewState.threeMonthMarketChart.toPairList() } } @@ -80,7 +80,7 @@ fun CoinDetailsScreen( try { viewState.threeMonthMarketChart.toPairList().subList(0, 719) } catch (e : Throwable){ - Timber.d(e.localizedMessage) + Timber.w(e.localizedMessage) viewState.threeMonthMarketChart.toPairList() } } diff --git a/feature_home/src/main/java/com/ryankoech/krypto/feature_home/core/ktx/HashMap.kt b/feature_coin_list/src/main/java/com/ryankoech/krypto/feature_coin_list/core/ktx/HashMap.kt similarity index 76% rename from feature_home/src/main/java/com/ryankoech/krypto/feature_home/core/ktx/HashMap.kt rename to feature_coin_list/src/main/java/com/ryankoech/krypto/feature_coin_list/core/ktx/HashMap.kt index 6b748b9..c30fe32 100644 --- a/feature_home/src/main/java/com/ryankoech/krypto/feature_home/core/ktx/HashMap.kt +++ b/feature_coin_list/src/main/java/com/ryankoech/krypto/feature_coin_list/core/ktx/HashMap.kt @@ -1,7 +1,7 @@ -package com.ryankoech.krypto.feature_home.core.ktx +package com.ryankoech.krypto.feature_coin_list.core.ktx import com.ryankoech.krypto.common.presentation.util.DisplayCurrency -import com.ryankoech.krypto.feature_home.data.dto.display_currency.DisplayCurrencyDto +import com.ryankoech.krypto.feature_coin_list.data.dto.display_currency.DisplayCurrencyDto fun HashMap.toDisplayCurrencyList() : List { diff --git a/feature_home/src/main/java/com/ryankoech/krypto/feature_home/data/data_source/local/shared_pref/HomeLocalPref.kt b/feature_coin_list/src/main/java/com/ryankoech/krypto/feature_coin_list/data/data_source/local/sharedl_pref/CoinsLocalPref.kt similarity index 82% rename from feature_home/src/main/java/com/ryankoech/krypto/feature_home/data/data_source/local/shared_pref/HomeLocalPref.kt rename to feature_coin_list/src/main/java/com/ryankoech/krypto/feature_coin_list/data/data_source/local/sharedl_pref/CoinsLocalPref.kt index 5d16666..9688d23 100644 --- a/feature_home/src/main/java/com/ryankoech/krypto/feature_home/data/data_source/local/shared_pref/HomeLocalPref.kt +++ b/feature_coin_list/src/main/java/com/ryankoech/krypto/feature_coin_list/data/data_source/local/sharedl_pref/CoinsLocalPref.kt @@ -1,23 +1,23 @@ -package com.ryankoech.krypto.feature_home.data.data_source.local.shared_pref +package com.ryankoech.krypto.feature_coin_list.data.data_source.local.sharedl_pref import android.content.Context import android.content.SharedPreferences import com.google.gson.Gson import com.google.gson.reflect.TypeToken import com.ryankoech.krypto.common.presentation.util.DisplayCurrency -import com.ryankoech.krypto.feature_home.core.ktx.toDisplayCurrencyList -import com.ryankoech.krypto.feature_home.data.dto.display_currency.DisplayCurrencyDto +import com.ryankoech.krypto.feature_coin_list.data.dto.display_currency.DisplayCurrencyDto +import com.ryankoech.krypto.feature_coin_list.core.ktx.toDisplayCurrencyList import dagger.hilt.android.qualifiers.ApplicationContext import kotlinx.coroutines.coroutineScope import timber.log.Timber import javax.inject.Inject -class HomeLocalPref @Inject constructor( +class CoinsLocalPref @Inject constructor( @ApplicationContext private val context : Context ) { companion object { - private const val PREF_NAME = "feature_home_local_pref" + private const val PREF_NAME = "feature_coin_local_pref" private const val DISPLAY_CURRENCY_KEY = "display_currency_data" } @@ -50,7 +50,7 @@ class HomeLocalPref @Inject constructor( gson.fromJson(json, object : TypeToken>() {}.type) displayCurrencyData }catch (e : Exception) { - Timber.e(e) + Timber.w(e) null } } diff --git a/feature_home/src/main/java/com/ryankoech/krypto/feature_home/data/dto/display_currency/DisplayCurrencyDto.kt b/feature_coin_list/src/main/java/com/ryankoech/krypto/feature_coin_list/data/dto/display_currency/DisplayCurrencyDto.kt similarity index 69% rename from feature_home/src/main/java/com/ryankoech/krypto/feature_home/data/dto/display_currency/DisplayCurrencyDto.kt rename to feature_coin_list/src/main/java/com/ryankoech/krypto/feature_coin_list/data/dto/display_currency/DisplayCurrencyDto.kt index fa972d8..16c92b2 100644 --- a/feature_home/src/main/java/com/ryankoech/krypto/feature_home/data/dto/display_currency/DisplayCurrencyDto.kt +++ b/feature_coin_list/src/main/java/com/ryankoech/krypto/feature_coin_list/data/dto/display_currency/DisplayCurrencyDto.kt @@ -1,4 +1,4 @@ -package com.ryankoech.krypto.feature_home.data.dto.display_currency +package com.ryankoech.krypto.feature_coin_list.data.dto.display_currency import com.ryankoech.krypto.common.presentation.util.DisplayCurrency diff --git a/feature_coin_list/src/main/java/com/ryankoech/krypto/feature_coin_list/data/repository/CoinRepositoryImpl.kt b/feature_coin_list/src/main/java/com/ryankoech/krypto/feature_coin_list/data/repository/CoinRepositoryImpl.kt index ceff42e..1f63aa0 100644 --- a/feature_coin_list/src/main/java/com/ryankoech/krypto/feature_coin_list/data/repository/CoinRepositoryImpl.kt +++ b/feature_coin_list/src/main/java/com/ryankoech/krypto/feature_coin_list/data/repository/CoinRepositoryImpl.kt @@ -1,15 +1,20 @@ package com.ryankoech.krypto.feature_coin_list.data.repository +import com.ryankoech.krypto.common.presentation.util.DisplayCurrency import com.ryankoech.krypto.feature_coin_list.data.data_source.local.db.CoinDao +import com.ryankoech.krypto.feature_coin_list.data.data_source.local.sharedl_pref.CoinsLocalPref import com.ryankoech.krypto.feature_coin_list.data.data_source.remote.CoinServiceApi import com.ryankoech.krypto.feature_coin_list.data.dto.CoinDto import com.ryankoech.krypto.feature_coin_list.data.dto.CoinLocalDto +import com.ryankoech.krypto.feature_coin_list.data.dto.display_currency.DisplayCurrencyDto import com.ryankoech.krypto.feature_coin_list.domain.repository.CoinRepository +import kotlinx.coroutines.coroutineScope import retrofit2.Response import javax.inject.Inject class CoinRepositoryImpl @Inject constructor( private val api : CoinServiceApi, + private val coinsLocalPref: CoinsLocalPref, private val dao : CoinDao ) : CoinRepository { @@ -23,5 +28,18 @@ class CoinRepositoryImpl @Inject constructor( override suspend fun getCoin(coinId: String): CoinLocalDto? = dao.getCoin(coinId) + override suspend fun saveDisplayCurrencyData(displayCurrencyDataMap: HashMap) { + return coroutineScope { + coinsLocalPref.saveDisplayCurrencyData(displayCurrencyDataMap) + } + } + + + override suspend fun getDisplayCurrencyData(): List? { + return coroutineScope { + coinsLocalPref.getDisplayCurrencyData() + } + } + } \ No newline at end of file diff --git a/feature_coin_list/src/main/java/com/ryankoech/krypto/feature_coin_list/data/repository/FakeCoinRepositoryImpl.kt b/feature_coin_list/src/main/java/com/ryankoech/krypto/feature_coin_list/data/repository/FakeCoinRepositoryImpl.kt index fd41d1f..10cf6e1 100644 --- a/feature_coin_list/src/main/java/com/ryankoech/krypto/feature_coin_list/data/repository/FakeCoinRepositoryImpl.kt +++ b/feature_coin_list/src/main/java/com/ryankoech/krypto/feature_coin_list/data/repository/FakeCoinRepositoryImpl.kt @@ -1,8 +1,10 @@ package com.ryankoech.krypto.feature_coin_list.data.repository +import com.ryankoech.krypto.common.presentation.util.DisplayCurrency import com.ryankoech.krypto.feature_coin_list.data.dto.CoinDto import com.ryankoech.krypto.feature_coin_list.data.dto.CoinLocalDto import com.ryankoech.krypto.feature_coin_list.data.dto.Roi +import com.ryankoech.krypto.feature_coin_list.data.dto.display_currency.DisplayCurrencyDto import com.ryankoech.krypto.feature_coin_list.data.dto.toLocalCoinDto import com.ryankoech.krypto.feature_coin_list.domain.repository.CoinRepository import retrofit2.Response @@ -212,6 +214,15 @@ val FAKE_COIN_LIST = listOf( ) ) +val FakeDisplayCurrencies = listOf( + DisplayCurrencyDto(DisplayCurrency.BNB, 262.4234), + DisplayCurrencyDto(DisplayCurrency.USD, 1.0), + DisplayCurrencyDto(DisplayCurrency.ETH, 1274.1234), + DisplayCurrencyDto(DisplayCurrency.BTC, 17505.54256), + DisplayCurrencyDto(DisplayCurrency.LTC, 74.13), +).sortedBy { it.currency.ordinal } + + class FakeCoinRepositoryImpl @Inject constructor() : CoinRepository { override suspend fun getCoins(): Response> { return Response.success(FAKE_COIN_LIST) @@ -224,4 +235,12 @@ class FakeCoinRepositoryImpl @Inject constructor() : CoinRepository { } override suspend fun getCoin(coinId: String): CoinLocalDto = FAKE_COIN_LIST.toLocalCoinDto().first() + + override suspend fun saveDisplayCurrencyData(displayCurrencyDataMap: HashMap) { + Timber.d("Saved Local DisplayCurrency Data") + } + + override suspend fun getDisplayCurrencyData(): List?{ + return FakeDisplayCurrencies + } } \ No newline at end of file diff --git a/feature_coin_list/src/main/java/com/ryankoech/krypto/feature_coin_list/domain/repository/CoinRepository.kt b/feature_coin_list/src/main/java/com/ryankoech/krypto/feature_coin_list/domain/repository/CoinRepository.kt index a46acc6..2c05c78 100644 --- a/feature_coin_list/src/main/java/com/ryankoech/krypto/feature_coin_list/domain/repository/CoinRepository.kt +++ b/feature_coin_list/src/main/java/com/ryankoech/krypto/feature_coin_list/domain/repository/CoinRepository.kt @@ -1,7 +1,9 @@ package com.ryankoech.krypto.feature_coin_list.domain.repository +import com.ryankoech.krypto.common.presentation.util.DisplayCurrency import com.ryankoech.krypto.feature_coin_list.data.dto.CoinDto import com.ryankoech.krypto.feature_coin_list.data.dto.CoinLocalDto +import com.ryankoech.krypto.feature_coin_list.data.dto.display_currency.DisplayCurrencyDto import retrofit2.Response interface CoinRepository { @@ -13,4 +15,8 @@ interface CoinRepository { suspend fun saveCoins(coins : List) suspend fun getCoin(coinId : String) : CoinLocalDto? + + suspend fun saveDisplayCurrencyData(displayCurrencyDataMap : HashMap) + + suspend fun getDisplayCurrencyData() : List? } \ No newline at end of file diff --git a/feature_coin_list/src/main/java/com/ryankoech/krypto/feature_coin_list/domain/usecase/GetCoinsUseCase.kt b/feature_coin_list/src/main/java/com/ryankoech/krypto/feature_coin_list/domain/usecase/GetCoinsUseCase.kt index 9e6c955..7a28c20 100644 --- a/feature_coin_list/src/main/java/com/ryankoech/krypto/feature_coin_list/domain/usecase/GetCoinsUseCase.kt +++ b/feature_coin_list/src/main/java/com/ryankoech/krypto/feature_coin_list/domain/usecase/GetCoinsUseCase.kt @@ -1,6 +1,7 @@ package com.ryankoech.krypto.feature_coin_list.domain.usecase import com.ryankoech.krypto.common.core.util.Resource +import com.ryankoech.krypto.common.presentation.util.DisplayCurrency import com.ryankoech.krypto.feature_coin_list.core.di.HILT_NAME_REPO_FOR_ALL import com.ryankoech.krypto.feature_coin_list.data.dto.CoinDto import com.ryankoech.krypto.feature_coin_list.data.dto.toCoinEntity @@ -43,6 +44,7 @@ class GetCoinsUseCase @Inject constructor( // Save to local if(!cacheCoin.isNullOrEmpty()) { repository.saveCoins(cacheCoin!!.toLocalCoinDto()) + saveDisplayCurrencies(cacheCoin!!) } response } else { @@ -72,6 +74,20 @@ class GetCoinsUseCase @Inject constructor( emit(Resource.Error(e.localizedMessage ?: "Unexpected Error Occurred.")) } } + + private suspend fun saveDisplayCurrencies(coins : List) { + val displayCurrenciesMap = hashMapOf() + displayCurrenciesMap[DisplayCurrency.USD] = 1.0 + val displayCurrencies = DisplayCurrency.values().map { it.toString() } + for (coin in coins) { + val coinSymbol = coin.symbol.uppercase(Locale.ROOT) + if (displayCurrencies.contains(coinSymbol)) { + displayCurrenciesMap[DisplayCurrency.valueOf(coinSymbol)] = coin.current_price + } + } + + repository.saveDisplayCurrencyData(displayCurrenciesMap) + } companion object{ @VisibleForTesting fun List.sortData(sortInfo: SortInfo): List { diff --git a/feature_home/src/main/java/com/ryankoech/krypto/feature_home/domain/usecase/GetDisplayCurrencyDataUseCase.kt b/feature_coin_list/src/main/java/com/ryankoech/krypto/feature_coin_list/domain/usecase/GetDisplayCurrencyDataUseCase.kt similarity index 62% rename from feature_home/src/main/java/com/ryankoech/krypto/feature_home/domain/usecase/GetDisplayCurrencyDataUseCase.kt rename to feature_coin_list/src/main/java/com/ryankoech/krypto/feature_coin_list/domain/usecase/GetDisplayCurrencyDataUseCase.kt index 2e4b11d..ac48b12 100644 --- a/feature_home/src/main/java/com/ryankoech/krypto/feature_home/domain/usecase/GetDisplayCurrencyDataUseCase.kt +++ b/feature_coin_list/src/main/java/com/ryankoech/krypto/feature_coin_list/domain/usecase/GetDisplayCurrencyDataUseCase.kt @@ -1,10 +1,10 @@ -package com.ryankoech.krypto.feature_home.domain.usecase +package com.ryankoech.krypto.feature_coin_list.domain.usecase import com.ryankoech.krypto.common.core.util.Resource import com.ryankoech.krypto.common.presentation.util.DisplayCurrency -import com.ryankoech.krypto.feature_home.core.di.HILT_NAME_REPO_FOR_ALL -import com.ryankoech.krypto.feature_home.data.dto.display_currency.DisplayCurrencyDto -import com.ryankoech.krypto.feature_home.domain.repository.OwnedCoinsRepository +import com.ryankoech.krypto.feature_coin_list.core.di.HILT_NAME_REPO_FOR_ALL +import com.ryankoech.krypto.feature_coin_list.data.dto.display_currency.DisplayCurrencyDto +import com.ryankoech.krypto.feature_coin_list.domain.repository.CoinRepository import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.flow @@ -16,14 +16,15 @@ import javax.inject.Inject import javax.inject.Named class GetDisplayCurrencyDataUseCase @Inject constructor( - @Named(HILT_NAME_REPO_FOR_ALL) private val repository: OwnedCoinsRepository + @Named(HILT_NAME_REPO_FOR_ALL) private val repository: CoinRepository ) { @VisibleForTesting internal val defaultList = listOf( DisplayCurrencyDto(DisplayCurrency.USD, 1.0)) operator fun invoke() = flow>> { - val currencyData = repository.getDisplayCurrencyData() ?: defaultList + val displayCurrenciesDto = repository.getDisplayCurrencyData() + val currencyData = if (displayCurrenciesDto.isNullOrEmpty()) defaultList else displayCurrenciesDto emit(Resource.Success(currencyData)) }.onStart { emit(Resource.Success(defaultList)) diff --git a/feature_home/src/main/java/com/ryankoech/krypto/feature_home/domain/usecase/SaveDisplayCurrencyDataUseCase.kt b/feature_coin_list/src/main/java/com/ryankoech/krypto/feature_coin_list/domain/usecase/SaveDisplayCurrencyDataUseCase.kt similarity index 68% rename from feature_home/src/main/java/com/ryankoech/krypto/feature_home/domain/usecase/SaveDisplayCurrencyDataUseCase.kt rename to feature_coin_list/src/main/java/com/ryankoech/krypto/feature_coin_list/domain/usecase/SaveDisplayCurrencyDataUseCase.kt index 1643fab..9eb4681 100644 --- a/feature_home/src/main/java/com/ryankoech/krypto/feature_home/domain/usecase/SaveDisplayCurrencyDataUseCase.kt +++ b/feature_coin_list/src/main/java/com/ryankoech/krypto/feature_coin_list/domain/usecase/SaveDisplayCurrencyDataUseCase.kt @@ -1,15 +1,15 @@ -package com.ryankoech.krypto.feature_home.domain.usecase +package com.ryankoech.krypto.feature_coin_list.domain.usecase import com.ryankoech.krypto.common.core.util.Resource import com.ryankoech.krypto.common.presentation.util.DisplayCurrency -import com.ryankoech.krypto.feature_home.core.di.HILT_NAME_REPO_FOR_ALL -import com.ryankoech.krypto.feature_home.domain.repository.OwnedCoinsRepository +import com.ryankoech.krypto.feature_coin_list.core.di.HILT_NAME_REPO_FOR_ALL +import com.ryankoech.krypto.feature_coin_list.domain.repository.CoinRepository import timber.log.Timber import javax.inject.Inject import javax.inject.Named class SaveDisplayCurrencyDataUseCase @Inject constructor( - @Named(HILT_NAME_REPO_FOR_ALL) private val repository: OwnedCoinsRepository + @Named(HILT_NAME_REPO_FOR_ALL) private val repository: CoinRepository ) { suspend operator fun invoke(displayCurrencyData: HashMap) : Resource = diff --git a/feature_home/src/androidTest/java/com/ryankoech/krypto/feature_home/data/data_source/local/shared_pref/HomeLocalPrefTest.kt b/feature_home/src/androidTest/java/com/ryankoech/krypto/feature_home/data/data_source/local/shared_pref/CoinsLocalPrefTest.kt similarity index 68% rename from feature_home/src/androidTest/java/com/ryankoech/krypto/feature_home/data/data_source/local/shared_pref/HomeLocalPrefTest.kt rename to feature_home/src/androidTest/java/com/ryankoech/krypto/feature_home/data/data_source/local/shared_pref/CoinsLocalPrefTest.kt index 9201dd2..24cf370 100644 --- a/feature_home/src/androidTest/java/com/ryankoech/krypto/feature_home/data/data_source/local/shared_pref/HomeLocalPrefTest.kt +++ b/feature_home/src/androidTest/java/com/ryankoech/krypto/feature_home/data/data_source/local/shared_pref/CoinsLocalPrefTest.kt @@ -5,7 +5,8 @@ import androidx.test.core.app.ApplicationProvider import androidx.test.ext.junit.runners.AndroidJUnit4 import com.google.common.truth.Truth.assertThat import com.ryankoech.krypto.common.presentation.util.DisplayCurrency -import com.ryankoech.krypto.feature_home.core.ktx.toDisplayCurrencyList +import com.ryankoech.krypto.feature_coin_list.data.data_source.local.sharedl_pref.CoinsLocalPref +import com.ryankoech.krypto.feature_coin_list.core.ktx.toDisplayCurrencyList import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.runBlocking import kotlinx.coroutines.test.runTest @@ -16,18 +17,18 @@ import org.junit.runner.RunWith @ExperimentalCoroutinesApi @RunWith(AndroidJUnit4::class) -class HomeLocalPrefTest { +class CoinsLocalPrefTest { - private var homeLocalPref: HomeLocalPref? = null + private var coinsLocalPref: CoinsLocalPref? = null @Before fun setUp() { - homeLocalPref = HomeLocalPref(ApplicationProvider.getApplicationContext().applicationContext) + coinsLocalPref = CoinsLocalPref(ApplicationProvider.getApplicationContext().applicationContext) } @After fun tearDown() { - homeLocalPref = null + coinsLocalPref = null } @Test @@ -39,10 +40,10 @@ class HomeLocalPrefTest { DisplayCurrency.BTC to 4.0, DisplayCurrency.BNB to 5.0, ) - homeLocalPref!!.saveDisplayCurrencyData(fakeDisplayCurrencyMap) + coinsLocalPref!!.saveDisplayCurrencyData(fakeDisplayCurrencyMap) runBlocking { - val retrievedDisplayCurrencyList = homeLocalPref!!.getDisplayCurrencyData() + val retrievedDisplayCurrencyList = coinsLocalPref!!.getDisplayCurrencyData() assertThat(retrievedDisplayCurrencyList).isEqualTo(fakeDisplayCurrencyMap.toDisplayCurrencyList()) } } diff --git a/feature_home/src/androidTest/java/com/ryankoech/krypto/feature_home/presentation/HomeScreenSuccessTest.kt b/feature_home/src/androidTest/java/com/ryankoech/krypto/feature_home/presentation/HomeScreenSuccessTest.kt index 50d22b7..7b98659 100644 --- a/feature_home/src/androidTest/java/com/ryankoech/krypto/feature_home/presentation/HomeScreenSuccessTest.kt +++ b/feature_home/src/androidTest/java/com/ryankoech/krypto/feature_home/presentation/HomeScreenSuccessTest.kt @@ -4,7 +4,7 @@ import androidx.compose.ui.test.assertIsDisplayed import androidx.compose.ui.test.junit4.createComposeRule import androidx.compose.ui.test.onNodeWithTag import com.ryankoech.krypto.common.presentation.theme.KryptoTheme -import com.ryankoech.krypto.feature_home.data.dto.display_currency.DisplayCurrencyDto +import com.ryankoech.krypto.feature_coin_list.data.dto.display_currency.DisplayCurrencyDto import com.ryankoech.krypto.feature_home.data.repository.FakeDisplayCurrencies import com.ryankoech.krypto.feature_home.data.repository.FakeOwnedCoins import com.ryankoech.krypto.feature_home.presentation.components.success.TEST_TAG_HOME_SCREEN_SUCCESS_NO_DATA diff --git a/feature_home/src/androidTest/java/com/ryankoech/krypto/feature_home/presentation/HomeScreenTest.kt b/feature_home/src/androidTest/java/com/ryankoech/krypto/feature_home/presentation/HomeScreenTest.kt index fbb64a4..0c68d67 100644 --- a/feature_home/src/androidTest/java/com/ryankoech/krypto/feature_home/presentation/HomeScreenTest.kt +++ b/feature_home/src/androidTest/java/com/ryankoech/krypto/feature_home/presentation/HomeScreenTest.kt @@ -9,7 +9,7 @@ import com.ryankoech.krypto.feature_home.R import com.ryankoech.krypto.feature_home.core.util.EXCEPTION_MESSAGE import com.ryankoech.krypto.feature_home.data.dto.owned_coin.OwnedCoinDto import com.ryankoech.krypto.feature_home.data.repository.FakeOwnedCoinsRepositoryImpl -import com.ryankoech.krypto.feature_home.domain.usecase.GetDisplayCurrencyDataUseCase +import com.ryankoech.krypto.feature_coin_list.domain.usecase.GetDisplayCurrencyDataUseCase import com.ryankoech.krypto.feature_home.domain.usecase.GetOwnedCoinsUseCase import com.ryankoech.krypto.feature_home.domain.usecase.WipeDatabaseUseCase import com.ryankoech.krypto.feature_home.presentation.components.success.HOME_SCREEN_ACTION_ITEM_WIPE_WALLET diff --git a/feature_home/src/androidTest/java/com/ryankoech/krypto/feature_home/presentation/components/success/HomeScreenSuccessWithDataTest.kt b/feature_home/src/androidTest/java/com/ryankoech/krypto/feature_home/presentation/components/success/HomeScreenSuccessWithDataTest.kt index 66a9588..518c811 100644 --- a/feature_home/src/androidTest/java/com/ryankoech/krypto/feature_home/presentation/components/success/HomeScreenSuccessWithDataTest.kt +++ b/feature_home/src/androidTest/java/com/ryankoech/krypto/feature_home/presentation/components/success/HomeScreenSuccessWithDataTest.kt @@ -6,7 +6,7 @@ import androidx.compose.ui.test.junit4.createAndroidComposeRule import com.ryankoech.krypto.common.presentation.theme.KryptoTheme import com.ryankoech.krypto.common.presentation.util.DisplayCurrency import com.ryankoech.krypto.common.presentation.util.getFormattedBalance -import com.ryankoech.krypto.feature_home.data.dto.display_currency.DisplayCurrencyDto +import com.ryankoech.krypto.feature_coin_list.data.dto.display_currency.DisplayCurrencyDto import com.ryankoech.krypto.feature_home.data.dto.owned_coin.OwnedCoinDto import com.ryankoech.krypto.feature_home.data.dto.owned_coin.getBalance import com.ryankoech.krypto.feature_home.R diff --git a/feature_home/src/main/java/com/ryankoech/krypto/feature_home/data/dto/owned_coin/OwnedCoinDto.kt b/feature_home/src/main/java/com/ryankoech/krypto/feature_home/data/dto/owned_coin/OwnedCoinDto.kt index 479a1f9..987192d 100644 --- a/feature_home/src/main/java/com/ryankoech/krypto/feature_home/data/dto/owned_coin/OwnedCoinDto.kt +++ b/feature_home/src/main/java/com/ryankoech/krypto/feature_home/data/dto/owned_coin/OwnedCoinDto.kt @@ -2,7 +2,7 @@ package com.ryankoech.krypto.feature_home.data.dto.owned_coin import androidx.room.Entity import androidx.room.PrimaryKey -import com.ryankoech.krypto.feature_home.data.dto.display_currency.DisplayCurrencyDto +import com.ryankoech.krypto.feature_coin_list.data.dto.display_currency.DisplayCurrencyDto const val OWNED_COIN_DTO_TABLENAME = "owned_coin_table" diff --git a/feature_home/src/main/java/com/ryankoech/krypto/feature_home/data/repository/FakeOwnedCoinsRepositoryImpl.kt b/feature_home/src/main/java/com/ryankoech/krypto/feature_home/data/repository/FakeOwnedCoinsRepositoryImpl.kt index 86f197f..7fe1462 100644 --- a/feature_home/src/main/java/com/ryankoech/krypto/feature_home/data/repository/FakeOwnedCoinsRepositoryImpl.kt +++ b/feature_home/src/main/java/com/ryankoech/krypto/feature_home/data/repository/FakeOwnedCoinsRepositoryImpl.kt @@ -1,7 +1,7 @@ package com.ryankoech.krypto.feature_home.data.repository import com.ryankoech.krypto.common.presentation.util.DisplayCurrency -import com.ryankoech.krypto.feature_home.data.dto.display_currency.DisplayCurrencyDto +import com.ryankoech.krypto.feature_coin_list.data.dto.display_currency.DisplayCurrencyDto import com.ryankoech.krypto.feature_home.data.dto.owned_coin.OwnedCoinDto import com.ryankoech.krypto.feature_home.domain.repository.OwnedCoinsRepository import kotlinx.coroutines.Dispatchers @@ -61,14 +61,6 @@ val FakeOwnedCoins = listOf( ), ) -val FakeDisplayCurrencies = listOf( - DisplayCurrencyDto(DisplayCurrency.BNB, 262.4234), - DisplayCurrencyDto(DisplayCurrency.USD, 1.0), - DisplayCurrencyDto(DisplayCurrency.ETH, 1274.1234), - DisplayCurrencyDto(DisplayCurrency.BTC, 17505.54256), - DisplayCurrencyDto(DisplayCurrency.LTC, 74.13), -).sortedBy { it.currency.ordinal } - class FakeOwnedCoinsRepositoryImpl @Inject constructor() : OwnedCoinsRepository { override suspend fun saveOwnedCoin(coin: OwnedCoinDto): String { @@ -90,14 +82,6 @@ class FakeOwnedCoinsRepositoryImpl @Inject constructor() : OwnedCoinsRepository } } - override suspend fun saveDisplayCurrencyData(displayCurrencyDataMap: HashMap) { - Timber.d("Saved Local DisplayCurrency Data") - } - - override suspend fun getDisplayCurrencyData(): List?{ - return FakeDisplayCurrencies - } - override suspend fun wipeDatabase() { Timber.d("Database cleared") } diff --git a/feature_home/src/main/java/com/ryankoech/krypto/feature_home/data/repository/OwnedCoinsRepositoryImpl.kt b/feature_home/src/main/java/com/ryankoech/krypto/feature_home/data/repository/OwnedCoinsRepositoryImpl.kt index de08570..3318a16 100644 --- a/feature_home/src/main/java/com/ryankoech/krypto/feature_home/data/repository/OwnedCoinsRepositoryImpl.kt +++ b/feature_home/src/main/java/com/ryankoech/krypto/feature_home/data/repository/OwnedCoinsRepositoryImpl.kt @@ -3,8 +3,6 @@ package com.ryankoech.krypto.feature_home.data.repository import com.ryankoech.krypto.common.presentation.util.DisplayCurrency import com.ryankoech.krypto.feature_home.data.data_source.local.db.OwnedCoinsDao import com.ryankoech.krypto.feature_home.data.data_source.local.db.OwnedCoinsDatabase -import com.ryankoech.krypto.feature_home.data.data_source.local.shared_pref.HomeLocalPref -import com.ryankoech.krypto.feature_home.data.dto.display_currency.DisplayCurrencyDto import com.ryankoech.krypto.feature_home.data.dto.owned_coin.OwnedCoinDto import com.ryankoech.krypto.feature_home.domain.repository.OwnedCoinsRepository import kotlinx.coroutines.CoroutineScope @@ -15,7 +13,6 @@ import javax.inject.Inject class OwnedCoinsRepositoryImpl @Inject constructor( private val coinsDao: OwnedCoinsDao, - private val homeLocalPref: HomeLocalPref, private val ownedCoinsDatabase : OwnedCoinsDatabase ) : OwnedCoinsRepository { @@ -39,19 +36,6 @@ class OwnedCoinsRepositoryImpl @Inject constructor( } } - override suspend fun saveDisplayCurrencyData(displayCurrencyDataMap: HashMap) { - return coroutineScope { - homeLocalPref.saveDisplayCurrencyData(displayCurrencyDataMap) - } - } - - - override suspend fun getDisplayCurrencyData(): List? { - return coroutineScope { - homeLocalPref.getDisplayCurrencyData() - } - } - override suspend fun wipeDatabase() { return coroutineScope { CoroutineScope(Dispatchers.IO).launch { diff --git a/feature_home/src/main/java/com/ryankoech/krypto/feature_home/domain/repository/OwnedCoinsRepository.kt b/feature_home/src/main/java/com/ryankoech/krypto/feature_home/domain/repository/OwnedCoinsRepository.kt index 5ec5023..f42ed11 100644 --- a/feature_home/src/main/java/com/ryankoech/krypto/feature_home/domain/repository/OwnedCoinsRepository.kt +++ b/feature_home/src/main/java/com/ryankoech/krypto/feature_home/domain/repository/OwnedCoinsRepository.kt @@ -1,7 +1,5 @@ package com.ryankoech.krypto.feature_home.domain.repository -import com.ryankoech.krypto.common.presentation.util.DisplayCurrency -import com.ryankoech.krypto.feature_home.data.dto.display_currency.DisplayCurrencyDto import com.ryankoech.krypto.feature_home.data.dto.owned_coin.OwnedCoinDto interface OwnedCoinsRepository { @@ -12,10 +10,6 @@ interface OwnedCoinsRepository { suspend fun getOwnedCoins() : List - suspend fun saveDisplayCurrencyData(displayCurrencyDataMap : HashMap) - - suspend fun getDisplayCurrencyData() : List? - suspend fun wipeDatabase() suspend fun deleteOwnedCoin(coinId : String) diff --git a/feature_home/src/main/java/com/ryankoech/krypto/feature_home/presentation/HomeScreenSuccess.kt b/feature_home/src/main/java/com/ryankoech/krypto/feature_home/presentation/HomeScreenSuccess.kt index cd93357..0b08b15 100644 --- a/feature_home/src/main/java/com/ryankoech/krypto/feature_home/presentation/HomeScreenSuccess.kt +++ b/feature_home/src/main/java/com/ryankoech/krypto/feature_home/presentation/HomeScreenSuccess.kt @@ -7,9 +7,9 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.platform.testTag import androidx.compose.ui.tooling.preview.Preview import com.ryankoech.krypto.common.presentation.theme.KryptoTheme -import com.ryankoech.krypto.feature_home.data.dto.display_currency.DisplayCurrencyDto +import com.ryankoech.krypto.feature_coin_list.data.dto.display_currency.DisplayCurrencyDto +import com.ryankoech.krypto.feature_coin_list.data.repository.FakeDisplayCurrencies import com.ryankoech.krypto.feature_home.data.dto.owned_coin.OwnedCoinDto -import com.ryankoech.krypto.feature_home.data.repository.FakeDisplayCurrencies import com.ryankoech.krypto.feature_home.data.repository.FakeOwnedCoins import com.ryankoech.krypto.feature_home.presentation.components.success.* diff --git a/feature_home/src/main/java/com/ryankoech/krypto/feature_home/presentation/components/success/HomeScreenSuccessWithData.kt b/feature_home/src/main/java/com/ryankoech/krypto/feature_home/presentation/components/success/HomeScreenSuccessWithData.kt index b3d3499..712ac19 100644 --- a/feature_home/src/main/java/com/ryankoech/krypto/feature_home/presentation/components/success/HomeScreenSuccessWithData.kt +++ b/feature_home/src/main/java/com/ryankoech/krypto/feature_home/presentation/components/success/HomeScreenSuccessWithData.kt @@ -14,11 +14,11 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import com.ryankoech.krypto.common.presentation.theme.KryptoTheme import com.ryankoech.krypto.feature_home.core.ktx.getNextIndex -import com.ryankoech.krypto.feature_home.data.dto.display_currency.DisplayCurrencyDto +import com.ryankoech.krypto.feature_coin_list.data.dto.display_currency.DisplayCurrencyDto +import com.ryankoech.krypto.feature_coin_list.data.repository.FakeDisplayCurrencies import com.ryankoech.krypto.feature_home.data.dto.owned_coin.OwnedCoinDto import com.ryankoech.krypto.feature_home.data.dto.owned_coin.getBalance import com.ryankoech.krypto.feature_home.data.dto.owned_coin.getChange -import com.ryankoech.krypto.feature_home.data.repository.FakeDisplayCurrencies import com.ryankoech.krypto.feature_home.data.repository.FakeOwnedCoins import com.ryankoech.krypto.feature_home.presentation.util.CreditCardDetails diff --git a/feature_home/src/main/java/com/ryankoech/krypto/feature_home/presentation/viewmodel/HomeScreenViewModel.kt b/feature_home/src/main/java/com/ryankoech/krypto/feature_home/presentation/viewmodel/HomeScreenViewModel.kt index 9848be3..d1660ec 100644 --- a/feature_home/src/main/java/com/ryankoech/krypto/feature_home/presentation/viewmodel/HomeScreenViewModel.kt +++ b/feature_home/src/main/java/com/ryankoech/krypto/feature_home/presentation/viewmodel/HomeScreenViewModel.kt @@ -6,7 +6,7 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.ryankoech.krypto.common.core.util.Resource import com.ryankoech.krypto.common.presentation.util.ScreenState -import com.ryankoech.krypto.feature_home.domain.usecase.GetDisplayCurrencyDataUseCase +import com.ryankoech.krypto.feature_coin_list.domain.usecase.GetDisplayCurrencyDataUseCase import com.ryankoech.krypto.feature_home.domain.usecase.GetOwnedCoinsUseCase import com.ryankoech.krypto.feature_home.domain.usecase.WipeDatabaseUseCase import com.ryankoech.krypto.feature_home.presentation.viewstate.HomeScreenViewState @@ -15,6 +15,7 @@ import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.SharedFlow import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach +import timber.log.Timber import javax.inject.Inject @HiltViewModel diff --git a/feature_home/src/main/java/com/ryankoech/krypto/feature_home/presentation/viewstate/HomeScreenViewState.kt b/feature_home/src/main/java/com/ryankoech/krypto/feature_home/presentation/viewstate/HomeScreenViewState.kt index f7ec6eb..4f2fcd1 100644 --- a/feature_home/src/main/java/com/ryankoech/krypto/feature_home/presentation/viewstate/HomeScreenViewState.kt +++ b/feature_home/src/main/java/com/ryankoech/krypto/feature_home/presentation/viewstate/HomeScreenViewState.kt @@ -1,7 +1,7 @@ package com.ryankoech.krypto.feature_home.presentation.viewstate import com.ryankoech.krypto.common.presentation.util.ScreenState -import com.ryankoech.krypto.feature_home.data.dto.display_currency.DisplayCurrencyDto +import com.ryankoech.krypto.feature_coin_list.data.dto.display_currency.DisplayCurrencyDto import com.ryankoech.krypto.feature_home.data.dto.owned_coin.OwnedCoinDto data class HomeScreenViewState( diff --git a/feature_home/src/test/java/com/ryankoech/krypto/feature_home/domain/usecase/GetDisplayCurrencyDataUseCaseTest.kt b/feature_home/src/test/java/com/ryankoech/krypto/feature_home/domain/usecase/GetDisplayCurrencyDataUseCaseTest.kt index 5ba81d2..dc07b96 100644 --- a/feature_home/src/test/java/com/ryankoech/krypto/feature_home/domain/usecase/GetDisplayCurrencyDataUseCaseTest.kt +++ b/feature_home/src/test/java/com/ryankoech/krypto/feature_home/domain/usecase/GetDisplayCurrencyDataUseCaseTest.kt @@ -2,6 +2,7 @@ package com.ryankoech.krypto.feature_home.domain.usecase import app.cash.turbine.test import com.google.common.truth.Truth.assertThat +import com.ryankoech.krypto.feature_coin_list.domain.usecase.GetDisplayCurrencyDataUseCase import com.ryankoech.krypto.feature_home.data.repository.FakeDisplayCurrencies import com.ryankoech.krypto.feature_home.data.repository.FakeOwnedCoinsRepositoryImpl import com.ryankoech.krypto.feature_home.domain.repository.OwnedCoinsRepository diff --git a/feature_home/src/test/java/com/ryankoech/krypto/feature_home/domain/usecase/SaveDisplayCurrencyDataUseCaseTest.kt b/feature_home/src/test/java/com/ryankoech/krypto/feature_home/domain/usecase/SaveDisplayCurrencyDataUseCaseTest.kt index 544bb24..2a977d0 100644 --- a/feature_home/src/test/java/com/ryankoech/krypto/feature_home/domain/usecase/SaveDisplayCurrencyDataUseCaseTest.kt +++ b/feature_home/src/test/java/com/ryankoech/krypto/feature_home/domain/usecase/SaveDisplayCurrencyDataUseCaseTest.kt @@ -3,6 +3,7 @@ package com.ryankoech.krypto.feature_home.domain.usecase import com.google.common.truth.Truth.assertThat import com.ryankoech.krypto.common.core.util.Resource import com.ryankoech.krypto.common.presentation.util.DisplayCurrency +import com.ryankoech.krypto.feature_coin_list.domain.usecase.SaveDisplayCurrencyDataUseCase import com.ryankoech.krypto.feature_home.core.util.EXCEPTION_MESSAGE import com.ryankoech.krypto.feature_home.data.repository.FakeOwnedCoinsRepositoryImpl import com.ryankoech.krypto.feature_home.domain.repository.OwnedCoinsRepository diff --git a/feature_transaction/src/main/java/com/ryankoech/krypto/feature_transaction/presentation/transaction/viewmodel/TransactionScreenViewModel.kt b/feature_transaction/src/main/java/com/ryankoech/krypto/feature_transaction/presentation/transaction/viewmodel/TransactionScreenViewModel.kt index ff5048a..4fdc392 100644 --- a/feature_transaction/src/main/java/com/ryankoech/krypto/feature_transaction/presentation/transaction/viewmodel/TransactionScreenViewModel.kt +++ b/feature_transaction/src/main/java/com/ryankoech/krypto/feature_transaction/presentation/transaction/viewmodel/TransactionScreenViewModel.kt @@ -59,10 +59,6 @@ class TransactionScreenViewModel @Inject constructor( fun saveCoinTransaction (transaction : TransactionDto) { - Timber.d(transaction.currentPrice.toString()) - Timber.d(_viewState.value.ownedCoin.value.toString()) - Timber.d(((transaction.currentPrice - _viewState.value.ownedCoin.value) / (_viewState.value.ownedCoin.value) * 100).toFloat().toString()) - _viewState.value = _viewState.value.copy( ownedCoin = _viewState.value.ownedCoin.copy( amount = if( transaction.transactionType == TransactionType.BUY) {