Ktor Server: Datenbank-Schicht (Exposed ORM) #41

Closed
opened 2026-05-14 17:27:49 +00:00 by jreinemann-euris · 1 comment
jreinemann-euris commented 2026-05-14 17:27:49 +00:00 (Migrated from github.com)

Feature: Server-seitige Datenbankschicht mit Exposed ORM

Part of: #11
Depends on: #40

Ziel

Der Ktor-Server hat eine persistente Datenbankschicht (H2 file-based) mit Exposed ORM, die das komplette Inventar speichern und abrufen kann.

Scope

  • Exposed-Dependencies hinzufuegen (exposed-core, exposed-dao, exposed-jdbc, exposed-kotlin-datetime)
  • H2-Database-Driver hinzufuegen
  • Exposed-Tabellen definieren: Categories, Locations, Items, Settings
  • Datenbank-Initialisierung (Schema-Erzeugung beim Start)
  • Repository-Schicht: InventoryRepository fuer CRUD-Zugriff
  • Mapping zwischen Exposed-Entities und Shared-DTOs

Technische Hinweise

  • Exposed ORM (JetBrains) - natuerliche Wahl fuer Ktor
  • H2 im File-Mode (jdbc:h2:file:./data/krisenvorrat) - persistent, kein externer DB-Server noetig
  • Tabellen-Schema orientiert sich an den Room-Entities im App-Modul
  • Transaction-Management via Exposed transaction {}

Akzeptanzkriterien

  • Exposed-Tabellen sind definiert und Schema wird beim Start erstellt
  • InventoryRepository kann Inventar speichern und laden
  • Mapping Shared-DTOs <-> Exposed-Entities funktioniert korrekt
  • Tests: Repository-Tests mit H2 in-memory
## Feature: Server-seitige Datenbankschicht mit Exposed ORM Part of: #11 Depends on: #40 ### Ziel Der Ktor-Server hat eine persistente Datenbankschicht (H2 file-based) mit Exposed ORM, die das komplette Inventar speichern und abrufen kann. ### Scope - Exposed-Dependencies hinzufuegen (exposed-core, exposed-dao, exposed-jdbc, exposed-kotlin-datetime) - H2-Database-Driver hinzufuegen - Exposed-Tabellen definieren: Categories, Locations, Items, Settings - Datenbank-Initialisierung (Schema-Erzeugung beim Start) - Repository-Schicht: `InventoryRepository` fuer CRUD-Zugriff - Mapping zwischen Exposed-Entities und Shared-DTOs ### Technische Hinweise - Exposed ORM (JetBrains) - natuerliche Wahl fuer Ktor - H2 im File-Mode (`jdbc:h2:file:./data/krisenvorrat`) - persistent, kein externer DB-Server noetig - Tabellen-Schema orientiert sich an den Room-Entities im App-Modul - Transaction-Management via Exposed `transaction {}` ### Akzeptanzkriterien - [ ] Exposed-Tabellen sind definiert und Schema wird beim Start erstellt - [ ] `InventoryRepository` kann Inventar speichern und laden - [ ] Mapping Shared-DTOs <-> Exposed-Entities funktioniert korrekt - [ ] Tests: Repository-Tests mit H2 in-memory
jreinemann-euris commented 2026-05-14 18:15:23 +00:00 (Migrated from github.com)

Abgeschlossen (2025-05-14)

Zyklen: 1
Tests: 6 Tests (4 Repository + 2 Application), 0 Fehler

Implementierte Artefakte

  • Tables.kt: Exposed-Tabellendefinitionen (Categories, Locations, Items, Settings) mit Foreign Keys
  • DatabaseFactory.kt: H2 file-based DB-Initialisierung, parametrisiert fuer Tests
  • InventoryRepository.kt: CRUD mit saveInventory/loadInventory, DTO-Mapping
  • InventoryRepositoryTest.kt: 4 Tests (leere DB, Round-Trip, Ueberschreiben, nullable Felder)
  • .gitignore: H2-Datenbankdateien ausgeschlossen

Abweichungen

  • Exposed DSL statt DAO verwendet (schlanker, direktes DTO-Mapping)
## Abgeschlossen (2025-05-14) **Zyklen:** 1 **Tests:** ✅ 6 Tests (4 Repository + 2 Application), 0 Fehler ### Implementierte Artefakte - ✅ `Tables.kt`: Exposed-Tabellendefinitionen (Categories, Locations, Items, Settings) mit Foreign Keys - ✅ `DatabaseFactory.kt`: H2 file-based DB-Initialisierung, parametrisiert fuer Tests - ✅ `InventoryRepository.kt`: CRUD mit saveInventory/loadInventory, DTO-Mapping - ✅ `InventoryRepositoryTest.kt`: 4 Tests (leere DB, Round-Trip, Ueberschreiben, nullable Felder) - ✅ `.gitignore`: H2-Datenbankdateien ausgeschlossen ### Abweichungen - Exposed DSL statt DAO verwendet (schlanker, direktes DTO-Mapping)
Sign in to join this conversation.
No description provided.