fix: Seed-Daten beim App-Start prüfen und ggf. einfügen

RoomDatabase.Callback.onCreate() wird bei adb install -r nicht erneut
ausgeführt, da die DB bereits existiert. Kategorien und Orte blieben
deshalb leer.

Lösung: SeedDatabaseUseCase prüft beim App-Start ob Kategorien/Orte
vorhanden sind und befüllt die Tabellen nur wenn sie leer sind.
This commit is contained in:
Jens Reinemann 2026-05-16 13:57:04 +02:00
commit caf7002406
2 changed files with 42 additions and 0 deletions

View file

@ -8,14 +8,22 @@ import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.tooling.preview.Preview
import androidx.lifecycle.lifecycleScope
import dagger.hilt.android.AndroidEntryPoint
import de.krisenvorrat.app.domain.usecase.SeedDatabaseUseCase
import de.krisenvorrat.app.ui.MainScreen
import de.krisenvorrat.app.ui.theme.KrisenvorratTheme
import kotlinx.coroutines.launch
import javax.inject.Inject
@AndroidEntryPoint
class MainActivity : ComponentActivity() {
@Inject internal lateinit var seedDatabaseUseCase: SeedDatabaseUseCase
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
lifecycleScope.launch { seedDatabaseUseCase() }
enableEdgeToEdge()
setContent {
KrisenvorratTheme {

View file

@ -0,0 +1,34 @@
package de.krisenvorrat.app.domain.usecase
import de.krisenvorrat.app.data.db.entity.CategoryEntity
import de.krisenvorrat.app.data.db.entity.LocationEntity
import de.krisenvorrat.app.domain.repository.CategoryRepository
import de.krisenvorrat.app.domain.repository.LocationRepository
import kotlinx.coroutines.flow.first
import javax.inject.Inject
internal class SeedDatabaseUseCase @Inject constructor(
private val categoryRepository: CategoryRepository,
private val locationRepository: LocationRepository
) {
suspend operator fun invoke() {
if (categoryRepository.getAll().first().isEmpty()) {
listOf(
"Lebensmittel",
"Wasser",
"Medikamente",
"Ausrüstung",
"Hygiene",
"Energie & Licht",
"Dokumente"
).forEach { name ->
categoryRepository.insert(CategoryEntity(name = name))
}
}
if (locationRepository.getAll().first().isEmpty()) {
locationRepository.insert(LocationEntity(name = "Keller"))
}
}
}