forked from agzam/vyatsu-schedule
feat(db): add teacher schedule tables and Room v4 migration
This commit is contained in:
@@ -3,6 +3,8 @@ package agzam.vyatsu.data.local
|
||||
import androidx.room.Database
|
||||
import androidx.room.RoomDatabase
|
||||
import androidx.room.TypeConverters
|
||||
import androidx.room.migration.Migration
|
||||
import androidx.sqlite.db.SupportSQLiteDatabase
|
||||
|
||||
@Database(
|
||||
entities = [
|
||||
@@ -11,9 +13,14 @@ import androidx.room.TypeConverters
|
||||
ScheduleEntity::class,
|
||||
DayEntity::class,
|
||||
LessonEntity::class,
|
||||
PreferenceEntity::class
|
||||
PreferenceEntity::class,
|
||||
DepartmentEntity::class,
|
||||
DepartmentPeriodEntity::class,
|
||||
TeacherScheduleEntity::class,
|
||||
TeacherDayEntity::class,
|
||||
TeacherLessonEntity::class
|
||||
],
|
||||
version = 3,
|
||||
version = 4,
|
||||
exportSchema = true
|
||||
)
|
||||
@TypeConverters(Converters::class)
|
||||
@@ -21,4 +28,91 @@ abstract class AppDatabase : RoomDatabase() {
|
||||
abstract fun groupDao(): GroupDao
|
||||
abstract fun scheduleDao(): ScheduleDao
|
||||
abstract fun preferencesDao(): PreferencesDao
|
||||
abstract fun teacherDao(): TeacherDao
|
||||
abstract fun teacherScheduleDao(): TeacherScheduleDao
|
||||
|
||||
companion object {
|
||||
val MIGRATION_3_4 = object : Migration(3, 4) {
|
||||
override fun migrate(db: SupportSQLiteDatabase) {
|
||||
db.execSQL(
|
||||
"CREATE TABLE IF NOT EXISTS `departments` (" +
|
||||
"`departmentId` TEXT NOT NULL, `name` TEXT NOT NULL, " +
|
||||
"`faculty` TEXT NOT NULL, `lastSyncedAt` INTEGER NOT NULL, " +
|
||||
"PRIMARY KEY(`departmentId`))"
|
||||
)
|
||||
db.execSQL(
|
||||
"CREATE TABLE IF NOT EXISTS `department_periods` (" +
|
||||
"`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " +
|
||||
"`departmentId` TEXT NOT NULL, `season` TEXT NOT NULL, " +
|
||||
"`weekStart` INTEGER NOT NULL, `weekEnd` INTEGER NOT NULL, " +
|
||||
"FOREIGN KEY(`departmentId`) REFERENCES `departments`(`departmentId`) " +
|
||||
"ON UPDATE NO ACTION ON DELETE CASCADE )"
|
||||
)
|
||||
db.execSQL(
|
||||
"CREATE INDEX IF NOT EXISTS `index_department_periods_departmentId` " +
|
||||
"ON `department_periods` (`departmentId`)"
|
||||
)
|
||||
db.execSQL(
|
||||
"CREATE TABLE IF NOT EXISTS `teacher_schedules` (" +
|
||||
"`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " +
|
||||
"`departmentId` TEXT NOT NULL, `season` TEXT NOT NULL, " +
|
||||
"`weekStart` INTEGER NOT NULL, `weekEnd` INTEGER NOT NULL, " +
|
||||
"`lastSyncedAt` INTEGER NOT NULL, " +
|
||||
"FOREIGN KEY(`departmentId`) REFERENCES `departments`(`departmentId`) " +
|
||||
"ON UPDATE NO ACTION ON DELETE CASCADE )"
|
||||
)
|
||||
db.execSQL(
|
||||
"CREATE INDEX IF NOT EXISTS `index_teacher_schedules_departmentId` " +
|
||||
"ON `teacher_schedules` (`departmentId`)"
|
||||
)
|
||||
db.execSQL(
|
||||
"CREATE UNIQUE INDEX IF NOT EXISTS `index_teacher_schedules_departmentId_season_weekStart` " +
|
||||
"ON `teacher_schedules` (`departmentId`, `season`, `weekStart`)"
|
||||
)
|
||||
db.execSQL(
|
||||
"CREATE TABLE IF NOT EXISTS `teacher_days` (" +
|
||||
"`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " +
|
||||
"`scheduleId` INTEGER NOT NULL, `date` INTEGER NOT NULL, " +
|
||||
"FOREIGN KEY(`scheduleId`) REFERENCES `teacher_schedules`(`id`) " +
|
||||
"ON UPDATE NO ACTION ON DELETE CASCADE )"
|
||||
)
|
||||
db.execSQL(
|
||||
"CREATE INDEX IF NOT EXISTS `index_teacher_days_scheduleId` " +
|
||||
"ON `teacher_days` (`scheduleId`)"
|
||||
)
|
||||
db.execSQL(
|
||||
"CREATE INDEX IF NOT EXISTS `index_teacher_days_date` " +
|
||||
"ON `teacher_days` (`date`)"
|
||||
)
|
||||
db.execSQL(
|
||||
"CREATE TABLE IF NOT EXISTS `teacher_lessons` (" +
|
||||
"`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " +
|
||||
"`dayId` INTEGER NOT NULL, `date` INTEGER NOT NULL, " +
|
||||
"`slotIndex` INTEGER NOT NULL, `start` INTEGER NOT NULL, " +
|
||||
"`end` INTEGER NOT NULL, `lessonIndex` INTEGER NOT NULL, " +
|
||||
"`raw` TEXT NOT NULL, `room` TEXT, `groupName` TEXT, " +
|
||||
"`subgroup` TEXT, `subject` TEXT, `type` TEXT NOT NULL, " +
|
||||
"`teacher` TEXT NOT NULL, " +
|
||||
"FOREIGN KEY(`dayId`) REFERENCES `teacher_days`(`id`) " +
|
||||
"ON UPDATE NO ACTION ON DELETE CASCADE )"
|
||||
)
|
||||
db.execSQL(
|
||||
"CREATE INDEX IF NOT EXISTS `index_teacher_lessons_dayId` " +
|
||||
"ON `teacher_lessons` (`dayId`)"
|
||||
)
|
||||
db.execSQL(
|
||||
"CREATE INDEX IF NOT EXISTS `index_teacher_lessons_teacher` " +
|
||||
"ON `teacher_lessons` (`teacher`)"
|
||||
)
|
||||
db.execSQL(
|
||||
"CREATE INDEX IF NOT EXISTS `index_teacher_lessons_room` " +
|
||||
"ON `teacher_lessons` (`room`)"
|
||||
)
|
||||
db.execSQL(
|
||||
"CREATE INDEX IF NOT EXISTS `index_teacher_lessons_subject` " +
|
||||
"ON `teacher_lessons` (`subject`)"
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user