Krisenvorrat Inventar-App – Android-App (Kotlin) zur Verwaltung eines Krisenvorrats-Inventars
Find a file
2026-05-18 22:10:04 +02:00
.github chore: update generaltest_admin_message.cpython-313.pyc, receive_admin_messages.cpython-313.pyc, send_admin_messages.cpython-313.pyc 2026-05-18 18:04:50 +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(notification): wire up updateBadgeCount to launcher badge via setNumber() 2026-05-18 22:10:04 +02:00
backup rename: Krisenvorrat -> Bollwerk 2026-05-17 17:44:02 +02:00
docs feat(ui): replace filter chips with BottomSheet + sort options 2026-05-18 12:27:28 +02:00
gradle chore: add ADMIN_MESSAGE_TOKEN to VPS docker-compose config 2026-05-18 14:13:52 +02:00
knowledge-conduit chore: update publish tooling and Android messaging integration 2026-05-18 15:13:49 +02:00
memories/repo rename: Krisenvorrat -> Bollwerk 2026-05-17 17:44:02 +02:00
server feat(server): add REST-API for resources (CRUD + download) 2026-05-18 22:06:24 +02:00
shared feat(shared): add ResourceDto for resource catalog 2026-05-18 22:00:45 +02:00
.dockerignore feat(server): add LAN dev-server integration & end-to-end sync tests 2026-05-14 21:45:33 +02:00
.env.example feat: column-level encryption at rest with AES-256-GCM (#98) 2026-05-17 22:17:10 +02:00
.gitignore rename: Genome Engine → Knowledge Conduit 2026-05-18 13:01:02 +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 feat: column-level encryption at rest with AES-256-GCM (#98) 2026-05-17 22:17:10 +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
import-inventar.ps1 feat: Krisenvorrats-Inventar digitalisiert und Import-Skript erstellt 2026-05-17 23:21:07 +02:00
import-inventar.py feat: Krisenvorrats-Inventar digitalisiert und Import-Skript erstellt 2026-05-17 23:21:07 +02:00
inventar.md feat: Krisenvorrats-Inventar digitalisiert und Import-Skript erstellt 2026-05-17 23:21:07 +02:00
README.md rename: Krisenvorrat -> Bollwerk 2026-05-17 17:44:02 +02:00
run-integration-tests.ps1 security: WebSocket Auth-Token aus Query-Parameter in Authorization-Header verschieben 2026-05-18 08:23:10 +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.