Magrate schedule domain to flow
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
package ru.fincode.tsudesk.core.common.config
|
||||
package ru.fincode.tsudesk.core.common.app
|
||||
|
||||
data class AppConfig(
|
||||
val isDebug: Boolean,
|
||||
val baseUrl: String,
|
||||
val networkTimeoutSec: Long
|
||||
)
|
||||
)
|
||||
@@ -0,0 +1,16 @@
|
||||
package ru.fincode.tsudesk.core.common.model
|
||||
|
||||
sealed interface DataResult<out T> {
|
||||
|
||||
data class Cache<T>(
|
||||
val data: T
|
||||
) : DataResult<T>
|
||||
|
||||
data class Network<T>(
|
||||
val data: T
|
||||
) : DataResult<T>
|
||||
|
||||
data class Error(
|
||||
val throwable: Throwable
|
||||
) : DataResult<Nothing>
|
||||
}
|
||||
@@ -1,49 +1,55 @@
|
||||
package ru.fincode.tsudesk.core.database.schedule
|
||||
|
||||
import androidx.room.Dao
|
||||
import androidx.room.Delete
|
||||
import androidx.room.Insert
|
||||
import androidx.room.OnConflictStrategy
|
||||
import androidx.room.Query
|
||||
import androidx.room.Transaction
|
||||
import ru.fincode.tsudesk.core.database.schedule.Query.DELETE_LESSON_BY_GROUP_KEY_QUERY
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import ru.fincode.tsudesk.core.database.schedule.Query.SELECT_LESSON_BY_KEY_QUERY
|
||||
import ru.fincode.tsudesk.core.database.schedule.Query.SELECT_SCHEDULE_BY_KEY_QUERY
|
||||
|
||||
@Dao
|
||||
interface ScheduleDao {
|
||||
|
||||
@Insert(onConflict = OnConflictStrategy.Companion.REPLACE)
|
||||
suspend fun upsertSchedule(schedule: ScheduleCacheEntity)
|
||||
|
||||
@Insert(onConflict = OnConflictStrategy.Companion.REPLACE)
|
||||
suspend fun insertLessons(lessons: List<LessonCacheEntity>)
|
||||
|
||||
@Query(SELECT_SCHEDULE_BY_KEY_QUERY)
|
||||
suspend fun getSchedule(key: String): ScheduleCacheEntity?
|
||||
fun observeSchedule(key: String): Flow<ScheduleCacheEntity?>
|
||||
|
||||
@Query(SELECT_LESSON_BY_KEY_QUERY)
|
||||
fun observeLessons(key: String): Flow<List<LessonCacheEntity>>
|
||||
|
||||
@Query("SELECT * FROM schedule_cache WHERE `key` = :key LIMIT 1")
|
||||
suspend fun getSchedule(key: String): ScheduleCacheEntity?
|
||||
|
||||
@Query("SELECT * FROM lesson_cache WHERE scheduleKey = :key")
|
||||
suspend fun getLessons(key: String): List<LessonCacheEntity>
|
||||
|
||||
@Query(DELETE_LESSON_BY_GROUP_KEY_QUERY)
|
||||
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
||||
suspend fun upsertSchedule(schedule: ScheduleCacheEntity)
|
||||
|
||||
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
||||
suspend fun insertLessons(lessons: List<LessonCacheEntity>)
|
||||
|
||||
@Query("DELETE FROM lesson_cache WHERE scheduleKey = :key")
|
||||
suspend fun deleteLessonsByKey(key: String)
|
||||
|
||||
@Delete
|
||||
suspend fun deleteSchedule(entity: ScheduleCacheEntity)
|
||||
@Query("DELETE FROM schedule_cache WHERE `key` = :key")
|
||||
suspend fun deleteScheduleByKey(key: String)
|
||||
|
||||
@Transaction
|
||||
suspend fun replaceSchedule(
|
||||
key: String, schedule: ScheduleCacheEntity, lessons: List<LessonCacheEntity>
|
||||
key: String,
|
||||
schedule: ScheduleCacheEntity,
|
||||
lessons: List<LessonCacheEntity>
|
||||
) {
|
||||
upsertSchedule(schedule)
|
||||
deleteLessonsByKey(key)
|
||||
upsertSchedule(schedule)
|
||||
insertLessons(lessons)
|
||||
}
|
||||
|
||||
@Transaction
|
||||
suspend fun clearSchedule(key: String) {
|
||||
deleteLessonsByKey(key)
|
||||
val header = getSchedule(key) ?: return
|
||||
deleteSchedule(header)
|
||||
deleteScheduleByKey(key)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package ru.fincode.tsudesk.core.network
|
||||
|
||||
import okhttp3.OkHttpClient
|
||||
import ru.fincode.tsudesk.core.common.config.AppConfig
|
||||
import ru.fincode.tsudesk.core.common.app.AppConfig
|
||||
import ru.fincode.tsudesk.core.network.interceptor.DebugInterceptor
|
||||
import java.util.concurrent.TimeUnit
|
||||
import javax.inject.Inject
|
||||
|
||||
@@ -6,7 +6,7 @@ import dagger.hilt.InstallIn
|
||||
import dagger.hilt.components.SingletonComponent
|
||||
import okhttp3.OkHttpClient
|
||||
import retrofit2.Retrofit
|
||||
import ru.fincode.tsudesk.core.common.config.AppConfig
|
||||
import ru.fincode.tsudesk.core.common.app.AppConfig
|
||||
import ru.fincode.tsudesk.core.network.RetrofitFactory
|
||||
import javax.inject.Singleton
|
||||
|
||||
|
||||
Reference in New Issue
Block a user