Room-Datenbank & DAOs #18

Closed
opened 2026-05-13 20:42:09 +00:00 by jreinemann-euris · 1 comment
jreinemann-euris commented 2026-05-13 20:42:09 +00:00 (Migrated from github.com)

Feature: Room-Datenbank & DAOs

Part of: #5
Depends on: #17

Ziel

KrisenvorratDatabase und alle vier DAOs (CategoryDao, LocationDao, ItemDao, SettingsDao) sind implementiert mit vollständigem CRUD und Flow-Queries.

Scope

  • KrisenvorratDatabase: RoomDatabase-Klasse, version=1, alle Entities + TypeConverter registriert
  • CategoryDao: insert, update, delete, getAll(): Flow<List>, getById()
  • LocationDao: insert, update, delete, getAll(): Flow<List>, getById()
  • ItemDao: insert, update, delete, getAll(): Flow<List>, getById(), getByCategory(), getByLocation(), getExpiringSoon(daysUntil: Int)
  • SettingsDao: insert/upsert, getValue(key), getAll(): Flow<List>

Technische Hinweise

  • Package: de.krisenvorrat.app.data.db
  • Package DAOs: de.krisenvorrat.app.data.db.dao
  • Alle Queries mit @Transaction wo nötig
  • Flow-Rückgabe für Listenabfragen (Coroutines-Integration)
  • getExpiringSoon: WHERE expiryDate IS NOT NULL AND expiryDate <=

Akzeptanzkriterien

  • Database-Klasse kompiliert und ist korrekt annotiert
  • Alle 4 DAOs mit CRUD-Operationen vorhanden
  • Flow-basierte Listenabfragen in allen DAOs
  • Tests: Jeder DAO in In-Memory-Datenbank (insert → getAll, update, delete)
## Feature: Room-Datenbank & DAOs Part of: #5 Depends on: #17 ### Ziel KrisenvorratDatabase und alle vier DAOs (CategoryDao, LocationDao, ItemDao, SettingsDao) sind implementiert mit vollständigem CRUD und Flow-Queries. ### Scope - `KrisenvorratDatabase`: RoomDatabase-Klasse, version=1, alle Entities + TypeConverter registriert - `CategoryDao`: insert, update, delete, getAll(): Flow<List<CategoryEntity>>, getById() - `LocationDao`: insert, update, delete, getAll(): Flow<List<LocationEntity>>, getById() - `ItemDao`: insert, update, delete, getAll(): Flow<List<ItemEntity>>, getById(), getByCategory(), getByLocation(), getExpiringSoon(daysUntil: Int) - `SettingsDao`: insert/upsert, getValue(key), getAll(): Flow<List<SettingsEntity>> ### Technische Hinweise - Package: `de.krisenvorrat.app.data.db` - Package DAOs: `de.krisenvorrat.app.data.db.dao` - Alle Queries mit `@Transaction` wo nötig - Flow-Rückgabe für Listenabfragen (Coroutines-Integration) - `getExpiringSoon`: WHERE expiryDate IS NOT NULL AND expiryDate <= <cutoff> ### Akzeptanzkriterien - [ ] Database-Klasse kompiliert und ist korrekt annotiert - [ ] Alle 4 DAOs mit CRUD-Operationen vorhanden - [ ] Flow-basierte Listenabfragen in allen DAOs - [ ] Tests: Jeder DAO in In-Memory-Datenbank (insert → getAll, update, delete)
jreinemann-euris commented 2026-05-13 21:19:00 +00:00 (Migrated from github.com)

Abgeschlossen (2026-05-13)

Zyklen: 1 Implementierungszyklus + 1 Korrekturzyklus (Code Review)
Tests: Build SUCCESSFUL, 4 Instrumentierungstests (connectedAndroidTest)

Implementierte Artefakte

  • \KrisenvorratDatabase: RoomDatabase v1, alle 4 Entities + LocalDateConverter
  • \CategoryDao: insert, update, delete, getAll() Flow, getById()
  • \LocationDao: insert, update, delete, getAll() Flow, getById()
  • \ItemDao: CRUD + getByCategory, getByLocation, getExpiringSoon(daysUntil) als Default-Interface-Methode
  • \SettingsDao: @Upsert, getValue, getAll() Flow
  • 4 DAO-Instrumentierungstests mit inMemoryDatabaseBuilder

Abweichungen

  • Board-Status konnte wegen GraphQL-Rate-Limit nicht automatisch gesetzt werden
## Abgeschlossen (2026-05-13) **Zyklen:** 1 Implementierungszyklus + 1 Korrekturzyklus (Code Review) **Tests:** ✅ Build SUCCESSFUL, 4 Instrumentierungstests (connectedAndroidTest) ### Implementierte Artefakte - ✅ \KrisenvorratDatabase\: RoomDatabase v1, alle 4 Entities + LocalDateConverter - ✅ \CategoryDao\: insert, update, delete, getAll() Flow, getById() - ✅ \LocationDao\: insert, update, delete, getAll() Flow, getById() - ✅ \ItemDao\: CRUD + getByCategory, getByLocation, getExpiringSoon(daysUntil) als Default-Interface-Methode - ✅ \SettingsDao\: @Upsert, getValue, getAll() Flow - ✅ 4 DAO-Instrumentierungstests mit inMemoryDatabaseBuilder ### Abweichungen - Board-Status konnte wegen GraphQL-Rate-Limit nicht automatisch gesetzt werden
Sign in to join this conversation.
No description provided.