Magrate schedule domain to flow
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user