bollwerk/README.md
Jens Reinemann a5f89e6a69 rename: Krisenvorrat -> Bollwerk
- Package: de.krisenvorrat.* -> de.bollwerk.*
- Klassen: KrisenvorratApp/Database/Theme -> Bollwerk*
- ApplicationId: de.bollwerk.app
- Server: BOLLWERK_* Env-Vars, bollwerk HOCON-Config
- Docker: bollwerk-server/db/backup Container-Namen
- Room DB: bollwerk.db, SharedPrefs: bollwerk_secure_prefs
- Export-Dateien: bollwerk_export/inventar
- UI-Strings, HTML, Admin-UI: alle auf Bollwerk
- Docs, Skills, README angepasst
- Alle Tests gruen, Build erfolgreich
2026-05-17 17:44:02 +02:00

143 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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://<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.