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:
parent
9cc15ffaad
commit
caf7002406
2 changed files with 42 additions and 0 deletions
|
|
@ -8,14 +8,22 @@ import androidx.compose.material3.MaterialTheme
|
||||||
import androidx.compose.material3.Text
|
import androidx.compose.material3.Text
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.ui.tooling.preview.Preview
|
import androidx.compose.ui.tooling.preview.Preview
|
||||||
|
import androidx.lifecycle.lifecycleScope
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
import de.krisenvorrat.app.domain.usecase.SeedDatabaseUseCase
|
||||||
import de.krisenvorrat.app.ui.MainScreen
|
import de.krisenvorrat.app.ui.MainScreen
|
||||||
import de.krisenvorrat.app.ui.theme.KrisenvorratTheme
|
import de.krisenvorrat.app.ui.theme.KrisenvorratTheme
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
@AndroidEntryPoint
|
@AndroidEntryPoint
|
||||||
class MainActivity : ComponentActivity() {
|
class MainActivity : ComponentActivity() {
|
||||||
|
|
||||||
|
@Inject internal lateinit var seedDatabaseUseCase: SeedDatabaseUseCase
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
lifecycleScope.launch { seedDatabaseUseCase() }
|
||||||
enableEdgeToEdge()
|
enableEdgeToEdge()
|
||||||
setContent {
|
setContent {
|
||||||
KrisenvorratTheme {
|
KrisenvorratTheme {
|
||||||
|
|
|
||||||
|
|
@ -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"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in a new issue