refactoring network layer

This commit is contained in:
2026-02-17 09:23:25 +03:00
parent d64f2b5b8f
commit 7b40f336cd
24 changed files with 204 additions and 119 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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