chore(#9): enable Room exportSchema and configure schemaLocation #19

Merged
admin merged 1 commits from chore/9-enable-room-exportschema into main 2026-06-28 12:55:35 +00:00
3 changed files with 218 additions and 1 deletions
+4
View File
@@ -46,6 +46,10 @@ kotlin {
} }
} }
ksp {
arg("room.schemaLocation", "$projectDir/schemas")
}
dependencies { dependencies {
implementation(platform(libs.androidx.compose.bom)) implementation(platform(libs.androidx.compose.bom))
implementation(libs.androidx.activity.compose) implementation(libs.androidx.activity.compose)
@@ -0,0 +1,213 @@
{
"formatVersion": 1,
"database": {
"version": 1,
"identityHash": "69cf0ecfde6f024939b9ad79d85cf77f",
"entities": [
{
"tableName": "categories",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT NOT NULL, `color` INTEGER NOT NULL, `iconName` TEXT, `isDefault` INTEGER NOT NULL)",
"fields": [
{
"fieldPath": "id",
"columnName": "id",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "name",
"columnName": "name",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "color",
"columnName": "color",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "iconName",
"columnName": "iconName",
"affinity": "TEXT"
},
{
"fieldPath": "isDefault",
"columnName": "isDefault",
"affinity": "INTEGER",
"notNull": true
}
],
"primaryKey": {
"autoGenerate": true,
"columnNames": [
"id"
]
}
},
{
"tableName": "expenses",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `amount` REAL NOT NULL, `categoryId` INTEGER NOT NULL, `date` INTEGER NOT NULL, `note` TEXT, `recurringExpenseId` INTEGER, `createdAt` INTEGER NOT NULL, FOREIGN KEY(`categoryId`) REFERENCES `categories`(`id`) ON UPDATE NO ACTION ON DELETE RESTRICT )",
"fields": [
{
"fieldPath": "id",
"columnName": "id",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "amount",
"columnName": "amount",
"affinity": "REAL",
"notNull": true
},
{
"fieldPath": "categoryId",
"columnName": "categoryId",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "date",
"columnName": "date",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "note",
"columnName": "note",
"affinity": "TEXT"
},
{
"fieldPath": "recurringExpenseId",
"columnName": "recurringExpenseId",
"affinity": "INTEGER"
},
{
"fieldPath": "createdAt",
"columnName": "createdAt",
"affinity": "INTEGER",
"notNull": true
}
],
"primaryKey": {
"autoGenerate": true,
"columnNames": [
"id"
]
},
"indices": [
{
"name": "index_expenses_categoryId",
"unique": false,
"columnNames": [
"categoryId"
],
"orders": [],
"createSql": "CREATE INDEX IF NOT EXISTS `index_expenses_categoryId` ON `${TABLE_NAME}` (`categoryId`)"
}
],
"foreignKeys": [
{
"table": "categories",
"onDelete": "RESTRICT",
"onUpdate": "NO ACTION",
"columns": [
"categoryId"
],
"referencedColumns": [
"id"
]
}
]
},
{
"tableName": "recurring_expenses",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `amount` REAL NOT NULL, `categoryId` INTEGER NOT NULL, `note` TEXT, `interval` TEXT NOT NULL, `startDate` INTEGER NOT NULL, `nextDueDate` INTEGER NOT NULL, `isActive` INTEGER NOT NULL, FOREIGN KEY(`categoryId`) REFERENCES `categories`(`id`) ON UPDATE NO ACTION ON DELETE RESTRICT )",
"fields": [
{
"fieldPath": "id",
"columnName": "id",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "amount",
"columnName": "amount",
"affinity": "REAL",
"notNull": true
},
{
"fieldPath": "categoryId",
"columnName": "categoryId",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "note",
"columnName": "note",
"affinity": "TEXT"
},
{
"fieldPath": "interval",
"columnName": "interval",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "startDate",
"columnName": "startDate",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "nextDueDate",
"columnName": "nextDueDate",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "isActive",
"columnName": "isActive",
"affinity": "INTEGER",
"notNull": true
}
],
"primaryKey": {
"autoGenerate": true,
"columnNames": [
"id"
]
},
"indices": [
{
"name": "index_recurring_expenses_categoryId",
"unique": false,
"columnNames": [
"categoryId"
],
"orders": [],
"createSql": "CREATE INDEX IF NOT EXISTS `index_recurring_expenses_categoryId` ON `${TABLE_NAME}` (`categoryId`)"
}
],
"foreignKeys": [
{
"table": "categories",
"onDelete": "RESTRICT",
"onUpdate": "NO ACTION",
"columns": [
"categoryId"
],
"referencedColumns": [
"id"
]
}
]
}
],
"setupQueries": [
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '69cf0ecfde6f024939b9ad79d85cf77f')"
]
}
}
@@ -18,7 +18,7 @@ import dev.achmad.ledgerr.data.local.entity.RecurringExpenseEntity
RecurringExpenseEntity::class, RecurringExpenseEntity::class,
], ],
version = 1, version = 1,
exportSchema = false, exportSchema = true,
) )
@TypeConverters(LocalDateConverter::class) @TypeConverters(LocalDateConverter::class)
abstract class AppDatabase : RoomDatabase() { abstract class AppDatabase : RoomDatabase() {