bollwerk/docs/migration-guide.md
Jens Reinemann 1df2d1cff5 refactor: manuelle DB-Migrationen durch Room AutoMigration ersetzen
- DB-Version auf 6 hochgezaehlt (Clean-Slate, keine Rueckwaertskompatibilitaet)
- Alle manuellen Migrationen (v1-v5) aus Migrations.kt entfernt
- DatabaseModule: addMigrations() durch fallbackToDestructiveMigration() ersetzt
- migration-guide.md: AutoMigration-Workflow dokumentiert
- Instrumentierte Tests: alte Migrationstests durch frische DB-Tests ersetzt
- Schema 6.json exportiert

Closes #89
2026-05-17 11:43:27 +02:00

67 lines
2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Room-Migrationen Entwickler-Leitfaden
## Grundsatz
Ab Version 6 nutzt die App **Room @AutoMigration** für Schema-Änderungen.
Room generiert die Migrationen automatisch User müssen nichts tun.
`fallbackToDestructiveMigration()` ist als Fallback aktiv: Kann Room keine
automatische Migration ableiten, wird die DB zurückgesetzt und neu erstellt.
## Aktuelle DB-Version
**Version 6** (Stand: Mai 2026)
Historische manuelle Migrationen (v1v5) wurden entfernt.
Keine Rückwärtskompatibilität zu älteren DB-Versionen.
## Checkliste für neue Schema-Änderungen
1. **DB-Version hochzählen**: `version` in `KrisenvorratDatabase` anpassen
2. **@AutoMigration ergänzen**: `autoMigrations = [AutoMigration(from = X, to = Y)]` in der `@Database`-Annotation
3. **Falls AutoMigration nicht reicht** (z.B. Column-Rename, Table-Rebuild):
- `@RenameColumn` / `@DeleteColumn` AutoMigrationSpec schreiben
- Oder manuelle `Migration(X, Y)` in `Migrations.kt` + `DatabaseModule.addMigrations()`
4. **Schema-Export prüfen**: JSON in `app/schemas/` wird automatisch generiert
## Beispiel: Einfache Spalte hinzufügen
```kotlin
// KrisenvorratDatabase.kt
@Database(
entities = [...],
version = 7,
autoMigrations = [AutoMigration(from = 6, to = 7)],
exportSchema = true
)
```
Fertig Room erkennt die neue Spalte automatisch.
## Beispiel: Spalte umbenennen
```kotlin
@Database(
entities = [...],
version = 7,
autoMigrations = [AutoMigration(from = 6, to = 7, spec = V6ToV7::class)],
exportSchema = true
)
abstract class KrisenvorratDatabase : RoomDatabase() {
@RenameColumn(tableName = "items", fromColumnName = "old_name", toColumnName = "new_name")
class V6ToV7 : AutoMigrationSpec
}
```
## Schema-Export
Room exportiert Schemas automatisch nach `app/schemas/`. Diese JSON-Dateien werden
versioniert und können für `MigrationTestHelper` verwendet werden.
Konfiguration in `app/build.gradle.kts`:
```kotlin
ksp {
arg("room.schemaLocation", "$projectDir/schemas")
}
```