From caf70024065a28fad0a38f5a06bf7bb7007262d9 Mon Sep 17 00:00:00 2001 From: Jens Reinemann Date: Sat, 16 May 2026 13:57:04 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20Seed-Daten=20beim=20App-Start=20pr=C3=BC?= =?UTF-8?q?fen=20und=20ggf.=20einf=C3=BCgen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- .../java/de/krisenvorrat/app/MainActivity.kt | 8 +++++ .../app/domain/usecase/SeedDatabaseUseCase.kt | 34 +++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 app/src/main/java/de/krisenvorrat/app/domain/usecase/SeedDatabaseUseCase.kt diff --git a/app/src/main/java/de/krisenvorrat/app/MainActivity.kt b/app/src/main/java/de/krisenvorrat/app/MainActivity.kt index af19290..3cea8d3 100644 --- a/app/src/main/java/de/krisenvorrat/app/MainActivity.kt +++ b/app/src/main/java/de/krisenvorrat/app/MainActivity.kt @@ -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 { diff --git a/app/src/main/java/de/krisenvorrat/app/domain/usecase/SeedDatabaseUseCase.kt b/app/src/main/java/de/krisenvorrat/app/domain/usecase/SeedDatabaseUseCase.kt new file mode 100644 index 0000000..f6ef57a --- /dev/null +++ b/app/src/main/java/de/krisenvorrat/app/domain/usecase/SeedDatabaseUseCase.kt @@ -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")) + } + } +}