Magrate schedule domain to flow

This commit is contained in:
2026-02-16 11:58:24 +03:00
parent a885ba7b1f
commit 9ca225db94
14 changed files with 139 additions and 57 deletions

View File

@@ -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
)
)

View File

@@ -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>
}

View File

@@ -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)
}
}
}

View File

@@ -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

View File

@@ -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