Krisenvorrat Inventar-App – Android-App (Kotlin) zur Verwaltung eines Krisenvorrats-Inventars
Find a file
Jens Reinemann 8280a9daf9 refactor: kcal/100g -> kcal/kg umbenennen und Mindestbestand entfernen
- ItemEntity, ItemDto: kcalPer100g -> kcalPerKg (kcal_per_kg),
  minStock-Spalte komplett entfernt
- CalculateSupplyRangeUseCase: Formel angepasst (/ 1000.0 * kcalPerKg)
- GetMinStockWarningsUseCase + MinStockWarning: gelöscht
- UI (ItemFormScreen, WarningsScreen, DashboardScreen): Mindestbestand-
  Felder und Warnungsabschnitte entfernt
- ViewModels, UiState, Repository: alle Referenzen bereinigt
- Server (Tables, InventoryRepository): Schema angepasst
- Room: fallbackToDestructiveMigration() hinzugefügt (keine Produktivdaten)
- Alle 434 Tests gruen
2026-05-16 14:19:10 +02:00
.github docs(device): Wireless ADB workflow und Screenshot-Pull dokumentiert 2026-05-16 12:55:35 +02:00
.vscode chore: initial project setup with Copilot config, skills, and workspace structure 2026-05-13 13:40:41 +02:00
Anforderungen refactor: kcal/100g -> kcal/kg umbenennen und Mindestbestand entfernen 2026-05-16 14:19:10 +02:00
app refactor: kcal/100g -> kcal/kg umbenennen und Mindestbestand entfernen 2026-05-16 14:19:10 +02:00
gradle feat(app): add Ktor HTTP client and SyncService for inventory sync 2026-05-14 21:14:40 +02:00
memories/repo chore: initial project setup with Copilot config, skills, and workspace structure 2026-05-13 13:40:41 +02:00
server refactor: kcal/100g -> kcal/kg umbenennen und Mindestbestand entfernen 2026-05-16 14:19:10 +02:00
shared refactor: kcal/100g -> kcal/kg umbenennen und Mindestbestand entfernen 2026-05-16 14:19:10 +02:00
.dockerignore feat(server): add LAN dev-server integration & end-to-end sync tests 2026-05-14 21:45:33 +02:00
.gitignore feat(server): add Exposed ORM database layer with H2 2026-05-14 20:15:07 +02:00
build.gradle.kts feat(server): add Ktor server module with health endpoint 2026-05-14 20:06:40 +02:00
Dockerfile feat(server): add LAN dev-server integration & end-to-end sync tests 2026-05-14 21:45:33 +02:00
gradle.properties fix: Build-Fehler beheben (gradle.properties, Theme, Icon) (#13) 2026-05-13 16:18:22 +02:00
gradlew feat: Android-Projekt-Gerüst anlegen (#13) 2026-05-13 15:24:39 +02:00
gradlew.bat feat: Android-Projekt-Gerüst anlegen (#13) 2026-05-13 15:24:39 +02:00
README.md feat(server): add LAN dev-server integration & end-to-end sync tests 2026-05-14 21:45:33 +02:00
settings.gradle.kts feat(server): add Ktor server module with health endpoint 2026-05-14 20:06:40 +02:00
start-server.ps1 feat(server): add LAN dev-server integration & end-to-end sync tests 2026-05-14 21:45:33 +02:00
start-server.sh feat(server): add LAN dev-server integration & end-to-end sync tests 2026-05-14 21:45:33 +02:00

Krisenvorrat

Android-App zur Verwaltung eines Krisenvorrats-Inventars mit lokaler Datenhaltung und Sync-Möglichkeit über einen LAN-Server.

Projektstruktur

Modul Beschreibung
app Android-App (Kotlin, Jetpack Compose, Room)
server Ktor REST-Server (H2-Datenbank, Fat-JAR)
shared Gemeinsame DTOs (kotlinx.serialization)

Voraussetzungen

  • Android Studio oder IntelliJ IDEA
  • JDK 21 (für Server) / JDK 11+ (für App)
  • Android SDK (API Level 35)

App bauen

# Windows
.\gradlew assembleDebug

# Linux/Mac
./gradlew assembleDebug

Tests ausführen

# Alle Tests (App + Server)
./gradlew test

# Nur Server-Tests
./gradlew :server:test

# Nur App-Tests
./gradlew :app:test

Phase 2: Server-Setup (LAN-Sync)

Übersicht

Der Sync-Server empfängt das Inventar der App als JSON und gibt es an andere App-Instanzen im selben LAN weiter. Die Kommunikation läuft über einfaches HTTP mit API-Key-Authentifizierung.

┌──────────┐    PUT /api/inventory    ┌──────────┐
│  App A   │ ───────────────────────► │  Server  │
│ (Upload) │                          │ :8080    │
└──────────┘                          └────┬─────┘
                                           │
┌──────────┐    GET /api/inventory    ┌────┴─────┐
│  App B   │ ◄─────────────────────── │  Server  │
│(Download)│                          │ :8080    │
└──────────┘                          └──────────┘

Schnellstart

Option A: Direkt starten (empfohlen für Entwicklung)

# Windows
.\start-server.ps1

# Linux/Mac
chmod +x start-server.sh
./start-server.sh

Das Skript baut automatisch das Fat-JAR und zeigt die LAN-IP an.

Option B: Manuell mit Gradle

./gradlew :server:run

Option C: Fat-JAR

# JAR bauen
./gradlew :server:buildFatJar

# Starten
java -jar server/build/libs/server.jar

Option D: Docker

# Image bauen
docker build -t krisenvorrat-server .

# Container starten
docker run -d \
  --name krisenvorrat \
  -p 8080:8080 \
  -e KRISENVORRAT_API_KEY="mein-sicherer-api-key" \
  -v krisenvorrat-data:/app/data \
  krisenvorrat-server

LAN-Setup

  1. Server-IP ermitteln:

    • Windows: ipconfig → IPv4-Adresse des WLAN/LAN-Adapters
    • Linux/Mac: ip addr oder ifconfig
    • Die Start-Skripte zeigen die IP automatisch an
  2. Firewall-Regel: Port 8080 (TCP eingehend) muss freigeschaltet sein:

    • Windows: netsh advfirewall firewall add rule name="Krisenvorrat" dir=in action=allow protocol=TCP localport=8080
    • Linux: sudo ufw allow 8080/tcp
  3. App konfigurieren:

    • Einstellungen → Server-URL: http://<SERVER-IP>:8080
    • Einstellungen → API-Key: den gleichen Key wie beim Server-Start

API-Endpunkte

Methode Pfad Auth Beschreibung
GET /api/health Health-Check, gibt "OK" zurück
GET /api/inventory API-Key Inventar vom Server laden (Pull)
PUT /api/inventory API-Key Inventar auf Server speichern (Push)

Authentifizierung: API-Key als X-API-Key-Header oder Bearer-Token.

Umgebungsvariablen

Variable Standard Beschreibung
KRISENVORRAT_API_KEY change-me-to-a-secure-key-at-least-32-chars API-Key für Auth

Sicherheitshinweise

  • Der Dev-Server nutzt HTTP (kein HTTPS) nur im vertrauenswürdigen LAN verwenden.
  • Für Produktionseinsatz: HTTPS mit Reverse-Proxy (z.B. nginx/Caddy) konfigurieren.
  • API-Key sollte mindestens 32 Zeichen lang sein.