refactoring network layer
This commit is contained in:
@@ -2,10 +2,12 @@ package ru.fincode.tsudesk.core.database
|
||||
|
||||
import androidx.room.Database
|
||||
import androidx.room.RoomDatabase
|
||||
import androidx.room.TypeConverters
|
||||
import ru.fincode.tsudesk.core.database.schedule.LessonCacheEntity
|
||||
import ru.fincode.tsudesk.core.database.schedule.ScheduleCacheEntity
|
||||
import ru.fincode.tsudesk.core.database.schedule.ScheduleDao
|
||||
|
||||
@TypeConverters(StringListConverter::class)
|
||||
@Database(
|
||||
entities = [
|
||||
// schedule feature
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
package ru.fincode.tsudesk.core.database
|
||||
|
||||
import androidx.room.TypeConverter
|
||||
|
||||
class StringListConverter {
|
||||
|
||||
private val separator = "||"
|
||||
|
||||
@TypeConverter
|
||||
fun fromList(list: List<String>?): String =
|
||||
list
|
||||
?.joinToString(separator = separator)
|
||||
.orEmpty()
|
||||
|
||||
@TypeConverter
|
||||
fun toList(value: String?): List<String> =
|
||||
value
|
||||
?.takeIf { it.isNotBlank() }
|
||||
?.split(separator)
|
||||
.orEmpty()
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
package ru.fincode.tsudesk.core.database.schedule
|
||||
|
||||
object ScheduleDbConstants {
|
||||
object Constants {
|
||||
const val SCHEDULE_TABLE = "schedule_cache"
|
||||
const val LESSON_TABLE = "lesson_cache"
|
||||
|
||||
|
||||
@@ -3,8 +3,8 @@ package ru.fincode.tsudesk.core.database.schedule
|
||||
import androidx.room.Entity
|
||||
import androidx.room.Index
|
||||
import androidx.room.PrimaryKey
|
||||
import ru.fincode.tsudesk.core.database.schedule.ScheduleDbConstants.COL_SCHEDULE_KEY
|
||||
import ru.fincode.tsudesk.core.database.schedule.ScheduleDbConstants.LESSON_TABLE
|
||||
import ru.fincode.tsudesk.core.database.schedule.Constants.COL_SCHEDULE_KEY
|
||||
import ru.fincode.tsudesk.core.database.schedule.Constants.LESSON_TABLE
|
||||
|
||||
@Entity(
|
||||
tableName = LESSON_TABLE, indices = [Index(value = [COL_SCHEDULE_KEY])]
|
||||
@@ -19,6 +19,6 @@ data class LessonCacheEntity(
|
||||
val typeName: String,
|
||||
val room: String,
|
||||
val teacher: String,
|
||||
val groupId: String,
|
||||
val groupIds: List<String>,
|
||||
val type: String
|
||||
)
|
||||
|
||||
@@ -1,13 +1,21 @@
|
||||
package ru.fincode.tsudesk.core.database.schedule
|
||||
|
||||
import ru.fincode.tsudesk.core.database.schedule.Constants.COL_KEY
|
||||
import ru.fincode.tsudesk.core.database.schedule.Constants.COL_SCHEDULE_KEY
|
||||
import ru.fincode.tsudesk.core.database.schedule.Constants.LESSON_TABLE
|
||||
import ru.fincode.tsudesk.core.database.schedule.Constants.SCHEDULE_TABLE
|
||||
|
||||
object Query {
|
||||
|
||||
const val SELECT_LESSON_BY_KEY_QUERY =
|
||||
"SELECT * FROM lesson_cache WHERE scheduleKey = :key"
|
||||
const val SELECT_LESSONS_BY_KEY_QUERY =
|
||||
"SELECT * FROM $LESSON_TABLE WHERE $COL_SCHEDULE_KEY = :key"
|
||||
|
||||
const val SELECT_SCHEDULE_BY_KEY_QUERY =
|
||||
"SELECT * FROM schedule_cache WHERE `key` = :key LIMIT 1"
|
||||
"SELECT * FROM $SCHEDULE_TABLE WHERE $COL_KEY = :key LIMIT 1"
|
||||
|
||||
const val DELETE_LESSON_BY_GROUP_KEY_QUERY =
|
||||
"DELETE FROM lesson_cache WHERE scheduleKey = :key"
|
||||
const val DELETE_LESSONS_BY_KEY =
|
||||
"DELETE FROM $LESSON_TABLE WHERE $COL_SCHEDULE_KEY = :key"
|
||||
|
||||
const val DELETE_SCHEDULE_BY_KEY =
|
||||
"DELETE FROM $SCHEDULE_TABLE WHERE $COL_KEY = :key"
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ package ru.fincode.tsudesk.core.database.schedule
|
||||
|
||||
import androidx.room.Entity
|
||||
import androidx.room.PrimaryKey
|
||||
import ru.fincode.tsudesk.core.database.schedule.ScheduleDbConstants.SCHEDULE_TABLE
|
||||
import ru.fincode.tsudesk.core.database.schedule.Constants.SCHEDULE_TABLE
|
||||
|
||||
@Entity(tableName = SCHEDULE_TABLE)
|
||||
data class ScheduleCacheEntity(
|
||||
|
||||
@@ -6,22 +6,25 @@ import androidx.room.OnConflictStrategy
|
||||
import androidx.room.Query
|
||||
import androidx.room.Transaction
|
||||
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.DELETE_LESSONS_BY_KEY
|
||||
import ru.fincode.tsudesk.core.database.schedule.Query.DELETE_SCHEDULE_BY_KEY
|
||||
import ru.fincode.tsudesk.core.database.schedule.Query.SELECT_LESSONS_BY_KEY_QUERY
|
||||
import ru.fincode.tsudesk.core.database.schedule.Query.SELECT_SCHEDULE_BY_KEY_QUERY
|
||||
|
||||
|
||||
@Dao
|
||||
interface ScheduleDao {
|
||||
|
||||
@Query(SELECT_SCHEDULE_BY_KEY_QUERY)
|
||||
fun observeSchedule(key: String): Flow<ScheduleCacheEntity?>
|
||||
|
||||
@Query(SELECT_LESSON_BY_KEY_QUERY)
|
||||
@Query(SELECT_LESSONS_BY_KEY_QUERY)
|
||||
fun observeLessons(key: String): Flow<List<LessonCacheEntity>>
|
||||
|
||||
@Query("SELECT * FROM schedule_cache WHERE `key` = :key LIMIT 1")
|
||||
@Query(SELECT_SCHEDULE_BY_KEY_QUERY)
|
||||
suspend fun getSchedule(key: String): ScheduleCacheEntity?
|
||||
|
||||
@Query("SELECT * FROM lesson_cache WHERE scheduleKey = :key")
|
||||
@Query(SELECT_LESSONS_BY_KEY_QUERY)
|
||||
suspend fun getLessons(key: String): List<LessonCacheEntity>
|
||||
|
||||
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
||||
@@ -30,10 +33,10 @@ interface ScheduleDao {
|
||||
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
||||
suspend fun insertLessons(lessons: List<LessonCacheEntity>)
|
||||
|
||||
@Query("DELETE FROM lesson_cache WHERE scheduleKey = :key")
|
||||
@Query(DELETE_LESSONS_BY_KEY)
|
||||
suspend fun deleteLessonsByKey(key: String)
|
||||
|
||||
@Query("DELETE FROM schedule_cache WHERE `key` = :key")
|
||||
@Query(DELETE_SCHEDULE_BY_KEY)
|
||||
suspend fun deleteScheduleByKey(key: String)
|
||||
|
||||
@Transaction
|
||||
@@ -48,7 +51,7 @@ interface ScheduleDao {
|
||||
}
|
||||
|
||||
@Transaction
|
||||
suspend fun clearSchedule(key: String) {
|
||||
suspend fun removeSchedule(key: String) {
|
||||
deleteLessonsByKey(key)
|
||||
deleteScheduleByKey(key)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user