package coredevices.database import PlatformContext import androidx.room.AutoMigration import androidx.room.ConstructedBy import androidx.room.Database import androidx.room.RoomDatabase import androidx.room.RoomDatabaseConstructor import androidx.room.TypeConverters import androidx.sqlite.driver.bundled.BundledSQLiteDriver import io.rebble.libpebblecommon.database.RoomTypeConverters import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.IO internal const val CORE_DATABASE_FILENAME = "coreapp.db" @Database( entities = [ HeartbeatStateEntity::class, AppstoreSource::class, AppstoreCollection::class, WeatherLocationEntity::class, HeartEntity::class, MemfaultChunkEntity::class, AnalyticsHeartbeatEntity::class, ], version = 9, autoMigrations = [ AutoMigration(from = 1, to = 2), AutoMigration(from = 2, to = 3), AutoMigration(from = 3, to = 4), AutoMigration(from = 4, to = 5), AutoMigration(from = 5, to = 6), AutoMigration(from = 6, to = 7), AutoMigration(from = 7, to = 8), AutoMigration(from = 8, to = 9), ], exportSchema = true, ) @ConstructedBy(CoreDatabaseConstructor::class) @TypeConverters(RoomTypeConverters::class) abstract class CoreDatabase : RoomDatabase() { abstract fun analyticsDao(): HeartbeatStateDao abstract fun appstoreSourceDao(): AppstoreSourceDao abstract fun appstoreCollectionDao(): AppstoreCollectionDao abstract fun weatherLocationDao(): WeatherLocationDao abstract fun heartsDao(): HeartsDao abstract fun memfaultChunkDao(): MemfaultChunkDao abstract fun analyticsHeartbeatDao(): AnalyticsHeartbeatDao } @Suppress("NO_ACTUAL_FOR_EXPECT") expect object CoreDatabaseConstructor : RoomDatabaseConstructor { override fun initialize(): CoreDatabase } fun getCoreRoomDatabase(ctx: PlatformContext): CoreDatabase { return getCoreDatabaseBuilder(ctx) //.addMigrations() .fallbackToDestructiveMigrationOnDowngrade(dropAllTables = true) // V7 required a full re-create. // .fallbackToDestructiveMigrationFrom(dropAllTables = true, 1) .setDriver(BundledSQLiteDriver()) .setQueryCoroutineContext(Dispatchers.IO) .build() } internal expect fun getCoreDatabaseBuilder(ctx: PlatformContext): RoomDatabase.Builder