# 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 ```powershell # Windows .\gradlew assembleDebug # Linux/Mac ./gradlew assembleDebug ``` ## Tests ausführen ```bash # 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) ```powershell # 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 ```bash ./gradlew :server:run ``` #### Option C: Fat-JAR ```bash # JAR bauen ./gradlew :server:buildFatJar # Starten java -jar server/build/libs/server.jar ``` #### Option D: Docker ```bash # 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://: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.