Room-Entities & TypeConverter #17

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

Feature: Room-Entities & TypeConverter

Part of: #5
Depends on: –

Ziel

Alle vier Room-Entities (Category, Location, Item, Settings) sowie der LocalDate-TypeConverter sind implementiert und kompilieren fehlerfrei.

Scope

  • CategoryEntity: id (Int PK AutoIncrement), name (String)
  • LocationEntity: id (Int PK AutoIncrement), name (String)
  • ItemEntity: id (String UUID), name, categoryId (FK), quantity (Double), unit (String), unitPrice (Double), kcalPer100g (Int?), expiryDate (LocalDate?), locationId (FK), minStock (Double), notes (String), lastUpdated (Long)
  • SettingsEntity: key (String PK), value (String)
  • LocalDateConverter: LocalDate? <-> String? (ISO-8601) als Room TypeConverter

Technische Hinweise

  • Package: de.krisenvorrat.app.data.db.entity
  • Room-Annotationen: @Entity, @PrimaryKey, @ColumnInfo, @ForeignKey, @TypeConverter
  • otalPrice wird NICHT gespeichert (berechnet: quantity × unitPrice)
  • Fremdschlüssel auf Category und Location mit onDelete = CASCADE

Akzeptanzkriterien

  • Alle 4 Entities kompilieren mit Room-Annotationen
  • TypeConverter für LocalDate? korrekt registriert
  • Fremdschlüssel-Constraints in ItemEntity korrekt definiert
  • Tests: Unit-Test für LocalDateConverter (Hin- und Rückkonvertierung)
## Feature: Room-Entities & TypeConverter Part of: #5 Depends on: – ### Ziel Alle vier Room-Entities (Category, Location, Item, Settings) sowie der LocalDate-TypeConverter sind implementiert und kompilieren fehlerfrei. ### Scope - CategoryEntity: id (Int PK AutoIncrement), name (String) - LocationEntity: id (Int PK AutoIncrement), name (String) - ItemEntity: id (String UUID), name, categoryId (FK), quantity (Double), unit (String), unitPrice (Double), kcalPer100g (Int?), expiryDate (LocalDate?), locationId (FK), minStock (Double), notes (String), lastUpdated (Long) - SettingsEntity: key (String PK), value (String) - LocalDateConverter: LocalDate? <-> String? (ISO-8601) als Room TypeConverter ### Technische Hinweise - Package: de.krisenvorrat.app.data.db.entity - Room-Annotationen: @Entity, @PrimaryKey, @ColumnInfo, @ForeignKey, @TypeConverter - otalPrice wird NICHT gespeichert (berechnet: quantity × unitPrice) - Fremdschlüssel auf Category und Location mit onDelete = CASCADE ### Akzeptanzkriterien - [ ] Alle 4 Entities kompilieren mit Room-Annotationen - [ ] TypeConverter für LocalDate? korrekt registriert - [ ] Fremdschlüssel-Constraints in ItemEntity korrekt definiert - [ ] Tests: Unit-Test für LocalDateConverter (Hin- und Rückkonvertierung)
jreinemann-euris commented 2026-05-13 20:57:53 +00:00 (Migrated from github.com)

Abgeschlossen (2026-05-13)

Zyklen: 1
Tests: 4 Tests, 0 Fehler

Implementierte Artefakte

  • \CategoryEntity: id (Int PK AutoIncrement), name (String)
  • \LocationEntity: id (Int PK AutoIncrement), name (String)
  • \ItemEntity: alle 12 Felder, FK zu Category & Location mit CASCADE, Indices
  • \SettingsEntity: key (String PK), value (String)
  • \LocalDateConverter: LocalDate? ↔ String? (ISO-8601)
  • \LocalDateConverterTest: 4 Unit-Tests (null/non-null, Hin- und Rückkonvertierung)

Abweichungen

  • @TypeConverters-Annotation am @Database-Level wird im Folge-Ticket #18 registriert (dort wird die Database-Klasse angelegt)
## Abgeschlossen (2026-05-13) **Zyklen:** 1 **Tests:** ✅ 4 Tests, 0 Fehler ### Implementierte Artefakte - ✅ \CategoryEntity\: id (Int PK AutoIncrement), name (String) - ✅ \LocationEntity\: id (Int PK AutoIncrement), name (String) - ✅ \ItemEntity\: alle 12 Felder, FK zu Category & Location mit CASCADE, Indices - ✅ \SettingsEntity\: key (String PK), value (String) - ✅ \LocalDateConverter\: LocalDate? ↔ String? (ISO-8601) - ✅ \LocalDateConverterTest\: 4 Unit-Tests (null/non-null, Hin- und Rückkonvertierung) ### Abweichungen - \@TypeConverters\-Annotation am \@Database\-Level wird im Folge-Ticket #18 registriert (dort wird die Database-Klasse angelegt)
Sign in to join this conversation.
No description provided.