Krisenvorrat Inventar-App – Android-App (Kotlin) zur Verwaltung eines Krisenvorrats-Inventars
Find a file
Jens Reinemann fdc016c786 fix: Differenzierte Sync-Aktivitätsmeldungen
- Neues SyncActivityMessage.CheckingForChanges 'Prüfe auf Änderungen…'
  wird beim initialen Catch-up nach Connect angezeigt (statt dem
  irreführenden 'Empfange Inventar-Update…')
- Neues SyncActivityMessage.NoChanges 'Keine Änderungen'
  wird angezeigt wenn der initiale Sync keine Daten zurückliefert
- Echter Server-Push (InventoryUpdated/FullSyncRequired) zeigt weiterhin
  'Empfange Inventar-Update…' → jede echte Kommunikation bleibt sichtbar
2026-05-17 20:27:49 +02:00
.github chore: remove Swift/iOS remnants 2026-05-17 19:00:31 +02:00
.vscode chore: initial project setup with Copilot config, skills, and workspace structure 2026-05-13 13:40:41 +02:00
Anforderungen rename: Krisenvorrat -> Bollwerk 2026-05-17 17:44:02 +02:00
app fix: Differenzierte Sync-Aktivitätsmeldungen 2026-05-17 20:27:49 +02:00
backup rename: Krisenvorrat -> Bollwerk 2026-05-17 17:44:02 +02:00
docs rename: Krisenvorrat -> Bollwerk 2026-05-17 17:44:02 +02:00
gradle feat(server): Rate-Limiting auf alle API-Endpoints 2026-05-17 03:31:57 +02:00
memories/repo rename: Krisenvorrat -> Bollwerk 2026-05-17 17:44:02 +02:00
server fix: Admin-Inventarliste zeigt GUID wenn kein Name gesetzt 2026-05-17 18:47:28 +02:00
shared rename: Krisenvorrat -> Bollwerk 2026-05-17 17:44:02 +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
docker-compose.yml ci: disable automatic CI triggers on push/PR 2026-05-17 18:23:27 +02:00
Dockerfile chore: migrate server URLs from IP to bollwerk.online domain 2026-05-17 18:22:17 +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 rename: Krisenvorrat -> Bollwerk 2026-05-17 17:44:02 +02:00
run-integration-tests.ps1 ci: disable automatic CI triggers on push/PR 2026-05-17 18:23:27 +02:00
settings.gradle.kts rename: Krisenvorrat -> Bollwerk 2026-05-17 17:44:02 +02:00
start-server.ps1 rename: Krisenvorrat -> Bollwerk 2026-05-17 17:44:02 +02:00
start-server.sh rename: Krisenvorrat -> Bollwerk 2026-05-17 17:44:02 +02:00

Bollwerk

Android-App zur Verwaltung eines Bollwerks-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 bollwerk-server .

# Container starten
docker run -d \
  --name bollwerk \
  -p 8080:8080 \
  -e BOLLWERK_API_KEY="mein-sicherer-api-key" \
  -v bollwerk-data:/app/data \
  bollwerk-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="Bollwerk" 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
BOLLWERK_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.