547343992a
Per review on PR #8 (#8): - Split @Upsert into @Insert(OnConflictStrategy.REPLACE) + @Update in all 3 DAOs. @Upsert returns -1 on the update path, so callers wanting the row ID would get a junk value. Interactors now call insert vs update based on id == 0. UpsertCategory returns category.id explicitly for the id != 0 branch. - Add @Transaction to the 3 @Relation queries (ExpenseDao.subscribeAll, ExpenseDao.subscribeByDateRange, RecurringExpenseDao.subscribeAll). This silences the KSP warnings the PR body mentioned and makes the intent explicit. - Switch MainApplication seeding from a fire-and-forget CoroutineScope to runBlocking(Dispatchers.IO). A fast first-tap on HomeScreen could otherwise call GetCategories.awaitDefault() before seeding completed and crash. - Add documenting comment on CategoryDao.getDefault() noting that the 'only one isDefault = 1' invariant is maintained at the interactor layer (partial unique index would be a v2 migration). - Add trailing newline to app/build.gradle.kts. - File follow-up issue #9 for flipping exportSchema to true before any v2 migration lands.
94 lines
2.7 KiB
Kotlin
94 lines
2.7 KiB
Kotlin
plugins {
|
|
alias(libs.plugins.android.application)
|
|
alias(libs.plugins.kotlin.compose)
|
|
alias(libs.plugins.serialization)
|
|
alias(libs.plugins.ksp)
|
|
}
|
|
|
|
android {
|
|
namespace = "dev.achmad.ledgerr"
|
|
compileSdk {
|
|
version = release(37)
|
|
}
|
|
|
|
defaultConfig {
|
|
applicationId = "dev.achmad.ledgerr"
|
|
minSdk = 26
|
|
targetSdk = 36
|
|
versionCode = 1
|
|
versionName = "1.0"
|
|
|
|
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
|
}
|
|
|
|
buildTypes {
|
|
release {
|
|
optimization {
|
|
enable = false
|
|
}
|
|
}
|
|
}
|
|
compileOptions {
|
|
sourceCompatibility = JavaVersion.VERSION_11
|
|
targetCompatibility = JavaVersion.VERSION_11
|
|
}
|
|
buildFeatures {
|
|
compose = true
|
|
}
|
|
}
|
|
|
|
kotlin {
|
|
compilerOptions {
|
|
freeCompilerArgs.addAll(
|
|
"-XXLanguage:+ContextParameters",
|
|
"-opt-in=kotlinx.serialization.ExperimentalSerializationApi",
|
|
)
|
|
}
|
|
}
|
|
|
|
dependencies {
|
|
implementation(platform(libs.androidx.compose.bom))
|
|
implementation(libs.androidx.activity.compose)
|
|
implementation(libs.androidx.compose.material3)
|
|
implementation(libs.androidx.compose.ui)
|
|
implementation(libs.androidx.compose.ui.graphics)
|
|
implementation(libs.androidx.compose.ui.tooling.preview)
|
|
implementation(libs.androidx.core.ktx)
|
|
implementation(libs.androidx.lifecycle.runtime.ktx)
|
|
testImplementation(libs.junit)
|
|
androidTestImplementation(platform(libs.androidx.compose.bom))
|
|
androidTestImplementation(libs.androidx.compose.ui.test.junit4)
|
|
androidTestImplementation(libs.androidx.espresso.core)
|
|
androidTestImplementation(libs.androidx.junit)
|
|
debugImplementation(libs.androidx.compose.ui.test.manifest)
|
|
debugImplementation(libs.androidx.compose.ui.tooling)
|
|
|
|
implementation(libs.material.icons)
|
|
implementation(libs.material.motion.compose.core)
|
|
implementation(libs.coil.compose)
|
|
|
|
implementation(libs.voyager.navigator)
|
|
implementation(libs.voyager.tabNavigator)
|
|
implementation(libs.voyager.transitions)
|
|
implementation(libs.voyager.screenmodel)
|
|
|
|
implementation(platform(libs.koin.bom))
|
|
implementation(libs.koin.android)
|
|
|
|
api(libs.okhttp.core)
|
|
api(libs.okhttp.logging)
|
|
api(libs.okhttp.brotli)
|
|
api(libs.okhttp.dnsoverhttps)
|
|
api(libs.okio)
|
|
api(libs.serialization.json)
|
|
api(libs.serialization.json.okio)
|
|
|
|
implementation(libs.room.runtime)
|
|
implementation(libs.room.ktx)
|
|
ksp(libs.room.compiler)
|
|
implementation(libs.pdfbox.android)
|
|
implementation(libs.vico.compose)
|
|
implementation(libs.vico.compose.m3)
|
|
implementation(libs.vico.core)
|
|
}
|