Explorar el Código

add domain model - CurrentCurrencies
add DTO
add UseCase

MrOzOn hace 4 años
padre
commit
6c5be40a1b

+ 1 - 1
app/src/main/java/com/mrozon/currencyconverter/data/db/CurrencyDao.kt

@@ -13,5 +13,5 @@ interface CurrencyDao {
     suspend fun insertAll(valutes: List<ValuteDb>)
 
     @Query("SELECT * FROM valutes")
-    fun getPlants(): Flow<List<ValuteDb>>
+    fun getValutes(): Flow<List<ValuteDb>>
 }

+ 26 - 0
app/src/main/java/com/mrozon/currencyconverter/domain/CalculateCurrencyUseCase.kt

@@ -0,0 +1,26 @@
+package com.mrozon.currencyconverter.domain
+
+import com.mrozon.currencyconverter.data.db.CurrencyDao
+import com.mrozon.currencyconverter.domain.dto.CurrencyMapper
+import com.mrozon.currencyconverter.domain.model.Currency
+import com.mrozon.currencyconverter.domain.model.CurrentCurrencies
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.collect
+import kotlinx.coroutines.flow.flow
+import kotlinx.coroutines.flow.map
+import javax.inject.Inject
+
+class CalculateCurrencyUseCase @Inject constructor(
+    private val currencyDao: CurrencyDao,
+    private val dto: CurrencyMapper
+): ICalculateCurrencyUseCase {
+    override fun loadCurrencies(): Flow<CurrentCurrencies> = flow{
+        val currencies = mutableListOf<Currency>()
+        val rub = Currency("RUB", "Российский рубль", 1.0, true)
+        currencies.add(rub)
+        currencyDao.getValutes().collect { listValuteDb ->
+            currencies.addAll(dto.map(listValuteDb))
+        }
+        emit(CurrentCurrencies(currencies, 1.0))
+    }
+}

+ 8 - 0
app/src/main/java/com/mrozon/currencyconverter/domain/ICalculateCurrencyUseCase.kt

@@ -0,0 +1,8 @@
+package com.mrozon.currencyconverter.domain
+
+import com.mrozon.currencyconverter.domain.model.CurrentCurrencies
+import kotlinx.coroutines.flow.Flow
+
+interface ICalculateCurrencyUseCase {
+    fun loadCurrencies(): Flow<CurrentCurrencies>
+}

+ 18 - 0
app/src/main/java/com/mrozon/currencyconverter/domain/dto/CurrencyMapper.kt

@@ -0,0 +1,18 @@
+package com.mrozon.currencyconverter.domain.dto
+
+import com.mrozon.currencyconverter.data.db.ValuteDb
+import com.mrozon.currencyconverter.domain.model.Currency
+import com.mrozon.currencyconverter.utils.BaseMapper
+import javax.inject.Inject
+import javax.inject.Singleton
+
+@Singleton
+class CurrencyMapper @Inject constructor(): BaseMapper<ValuteDb, Currency>() {
+
+    override fun map(entity: ValuteDb) = Currency(
+        charCode = entity.charCode,
+        name = entity.name,
+        value = entity.value,
+        selected = false
+    )
+}

+ 8 - 0
app/src/main/java/com/mrozon/currencyconverter/domain/model/Currency.kt

@@ -0,0 +1,8 @@
+package com.mrozon.currencyconverter.domain.model
+
+data class Currency(
+    val charCode: String,
+    val name: String,
+    val value: Double,
+    val selected: Boolean
+)

+ 7 - 0
app/src/main/java/com/mrozon/currencyconverter/domain/model/CurrentCurrencies.kt

@@ -0,0 +1,7 @@
+package com.mrozon.currencyconverter.domain.model
+
+
+data class CurrentCurrencies(
+    val valutes: List<Currency>,
+    val value: Double
+)

+ 16 - 0
app/src/main/java/com/mrozon/currencyconverter/utils/BaseMapper.kt

@@ -0,0 +1,16 @@
+package com.mrozon.currencyconverter.utils
+
+abstract class BaseMapper<EntityDb, Model> {
+
+    abstract fun map(entity: EntityDb) : Model
+
+    fun map(entityList: List<EntityDb>) : List<Model> {
+        val modelList = arrayListOf<Model>()
+        entityList.forEach { entityDb ->
+            map(entityDb).let { model ->
+                modelList.add(model)
+            }
+        }
+        return modelList
+    }
+}