Переглянути джерело

add Timber
add repository for update db from network

MrOzOn 4 роки тому
батько
коміт
0ea71ba332

+ 2 - 0
app/build.gradle

@@ -45,6 +45,8 @@ dependencies {
     implementation 'androidx.appcompat:appcompat:1.3.0'
     implementation 'com.google.android.material:material:1.3.0'
     implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
+    //Timber
+    implementation 'com.jakewharton.timber:timber:4.7.1'
     //Dagger Hilt
     implementation "com.google.dagger:hilt-android:$hilt_version"
     kapt "com.google.dagger:hilt-compiler:$hilt_version"

+ 10 - 0
app/src/main/java/com/mrozon/currencyconverter/CoroutineContextDispatchers.kt

@@ -0,0 +1,10 @@
+package com.mrozon.currencyconverter
+
+import kotlinx.coroutines.Dispatchers
+import javax.inject.Inject
+import kotlin.coroutines.CoroutineContext
+
+open class CoroutineContextDispatchers @Inject constructor(){
+    open val Main: CoroutineContext by lazy { Dispatchers.Main }
+    open val IO: CoroutineContext by lazy { Dispatchers.IO }
+}

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

@@ -10,7 +10,7 @@ import kotlinx.coroutines.flow.Flow
 interface CurrencyDao {
 
     @Insert(onConflict = OnConflictStrategy.REPLACE)
-    suspend fun insertAll(plants: List<ValuteDb>)
+    suspend fun insertAll(valutes: List<ValuteDb>)
 
     @Query("SELECT * FROM valutes")
     fun getPlants(): Flow<List<ValuteDb>>

+ 0 - 15
app/src/main/java/com/mrozon/currencyconverter/data/db/CurrencyDatabase.kt

@@ -22,21 +22,6 @@ abstract class CurrencyDatabase : RoomDatabase() {
 
         private fun buildDatabase(context: Context): CurrencyDatabase {
             return Room.databaseBuilder(context, CurrencyDatabase::class.java, DATABASE_NAME)
-                .addCallback(
-                    object : RoomDatabase.Callback() {
-//                        override fun onOpen(db: SupportSQLiteDatabase) {
-//                            super.onOpen(db)
-//                        }
-//
-//                        override fun onCreate(db: SupportSQLiteDatabase) {
-//                            super.onCreate(db)
-//                            val request = OneTimeWorkRequestBuilder<SeedDatabaseWorker>()
-//                                .setInputData(workDataOf(KEY_FILENAME to PLANT_DATA_FILENAME))
-//                                .build()
-//                            WorkManager.getInstance(context).enqueue(request)
-//                        }
-                    }
-                )
                 .build()
         }
     }

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

@@ -9,5 +9,5 @@ data class ValuteDb(
     val id: String,
     val charCode: String,
     val name: String,
-    val value: Float
+    val value: Double
 )

+ 8 - 0
app/src/main/java/com/mrozon/currencyconverter/data/network/CurrenciesResponse.kt

@@ -1,6 +1,7 @@
 package com.mrozon.currencyconverter.data.network
 
 import com.google.gson.annotations.SerializedName
+import com.mrozon.currencyconverter.data.db.ValuteDb
 
 data class CurrenciesResponse(
 
@@ -44,3 +45,10 @@ data class Valute(
 	val name: String? = null
 )
 
+fun Valute.toValuteDb() = ValuteDb(
+	id = this.iD?:"",
+	charCode = this.charCode?:"",
+	name = this.name?:"",
+	value = (this.value?:0.0) / (this.nominal?:1)
+)
+

+ 5 - 0
app/src/main/java/com/mrozon/currencyconverter/data/repository/IUpdateValutesRepository.kt

@@ -0,0 +1,5 @@
+package com.mrozon.currencyconverter.data.repository
+
+interface IUpdateValutesRepository {
+    suspend fun update()
+}

+ 24 - 0
app/src/main/java/com/mrozon/currencyconverter/data/repository/UpdateValutesRepository.kt

@@ -0,0 +1,24 @@
+package com.mrozon.currencyconverter.data.repository
+
+import com.mrozon.currencyconverter.data.db.CurrencyDao
+import com.mrozon.currencyconverter.data.db.ValuteDb
+import com.mrozon.currencyconverter.data.network.CurrencyService
+import com.mrozon.currencyconverter.data.network.toValuteDb
+import timber.log.Timber
+import javax.inject.Inject
+
+class UpdateValutesRepository @Inject constructor(
+    private val currencyService: CurrencyService,
+    private val currencyDao: CurrencyDao
+): IUpdateValutesRepository {
+
+    override suspend fun update() {
+        val currencies = currencyService.getCurrencies()
+        val valutes = mutableListOf<ValuteDb>()
+        currencies.valute?.entries?.forEach { (_, value) ->
+            valutes.add(value.toValuteDb())
+        }
+        currencyDao.insertAll(valutes)
+        Timber.d("currencies updated!!!")
+    }
+}

+ 2 - 1
detekt-config.yml

@@ -179,6 +179,7 @@ exceptions:
       - NumberFormatException
       - ParseException
       - MalformedURLException
+      - TooGenericException
     allowedExceptionNameRegex: '_|(ignore|expected).*'
   ThrowingExceptionFromFinally:
     active: false
@@ -413,7 +414,7 @@ naming:
     excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**']
     variablePattern: '[a-z][A-Za-z0-9]*'
     privateVariablePattern: '(_)?[a-z][A-Za-z0-9]*'
-    excludeClassPattern: '$^'
+    excludeClassPattern: '$CoroutineContextDispatchers^'
     ignoreOverridden: true
 
 performance: