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
This commit is contained in:
parent
f1abc2cd23
commit
a5f89e6a69
246 changed files with 1074 additions and 1074 deletions
2
.github/copilot-instructions.md
vendored
2
.github/copilot-instructions.md
vendored
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
## Projekt
|
||||
|
||||
**Krisenvorrat Inventar-App** – Eine Android-App (Kotlin) zur Verwaltung eines Krisenvorrats-Inventars mit lokaler Datenhaltung und Sharing-Möglichkeit.
|
||||
**Bollwerk Inventar-App** – Eine Android-App (Kotlin) zur Verwaltung eines Bollwerks-Inventars mit lokaler Datenhaltung und Sharing-Möglichkeit.
|
||||
|
||||
## Technischer Stack
|
||||
|
||||
|
|
|
|||
2
.github/kotlin-conventions.instructions.md
vendored
2
.github/kotlin-conventions.instructions.md
vendored
|
|
@ -2,7 +2,7 @@
|
|||
applyTo: "**/*.kt"
|
||||
---
|
||||
|
||||
# Kotlin Coding Conventions – Krisenvorrat App
|
||||
# Kotlin Coding Conventions – Bollwerk App
|
||||
|
||||
Diese Konventionen gelten für alle Kotlin-Dateien im Workspace.
|
||||
|
||||
|
|
|
|||
|
|
@ -138,7 +138,7 @@ Nach dem Anlegen **jedes** [T]- und [P]-Tickets **sofort** ausführen:
|
|||
|
||||
```powershell
|
||||
# 1. Ticket zum Board hinzufügen
|
||||
gh project item-add 2 --owner jreinemann-euris --url "https://github.com/jreinemann-euris/krisenvorrat/issues/<N>"
|
||||
gh project item-add 2 --owner jreinemann-euris --url "https://github.com/jreinemann-euris/bollwerk/issues/<N>"
|
||||
|
||||
# 2. Bestehende Order-Werte abfragen (höchsten Wert ermitteln)
|
||||
& ".github/skills/gh-tickets/next-ticket.ps1" | Out-Null # zeigt alle offenen Tickets mit Order
|
||||
|
|
|
|||
2
.github/prompts/workflow-planning.prompt.md
vendored
2
.github/prompts/workflow-planning.prompt.md
vendored
|
|
@ -91,7 +91,7 @@ Nach dem Anlegen jedes [F]-Tickets **sofort** ausführen:
|
|||
|
||||
```powershell
|
||||
# 1. Ticket zum Board hinzufügen
|
||||
gh project item-add 2 --owner jreinemann-euris --url "https://github.com/jreinemann-euris/krisenvorrat/issues/<N>"
|
||||
gh project item-add 2 --owner jreinemann-euris --url "https://github.com/jreinemann-euris/bollwerk/issues/<N>"
|
||||
|
||||
# 2. Bestehende Order-Werte abfragen (höchsten Wert ermitteln)
|
||||
& ".github/skills/gh-tickets/next-ticket.ps1" | Out-Null # zeigt alle offenen Tickets mit Order
|
||||
|
|
|
|||
6
.github/skills/android-build/SKILL.md
vendored
6
.github/skills/android-build/SKILL.md
vendored
|
|
@ -5,7 +5,7 @@ description: "Android-App bauen (assembleDebug/Release), Gradle-Kommandos, häuf
|
|||
|
||||
# Skill: Android Build
|
||||
|
||||
Baut die Krisenvorrat-Android-App mit Gradle. Handhabt bekannte Fallstricke auf diesem Windows-Setup.
|
||||
Baut die Bollwerk-Android-App mit Gradle. Handhabt bekannte Fallstricke auf diesem Windows-Setup.
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -63,7 +63,7 @@ Falls das Skript nicht verfügbar ist, gibt es **zwei verlässliche Varianten**:
|
|||
#### Variante A – via `execution_subagent` (empfohlen)
|
||||
|
||||
```
|
||||
cd x:\krisenvorrat ; .\gradlew assembleDebug test
|
||||
cd x:\bollwerk ; .\gradlew assembleDebug test
|
||||
```
|
||||
|
||||
- `.\gradlew` (ohne `.bat`) funktioniert hier einwandfrei
|
||||
|
|
@ -75,7 +75,7 @@ cd x:\krisenvorrat ; .\gradlew assembleDebug test
|
|||
|
||||
```powershell
|
||||
$env:ANDROID_HOME = "C:\Users\JensR\AppData\Local\Android\Sdk"
|
||||
cd "x:\krisenvorrat"
|
||||
cd "x:\bollwerk"
|
||||
.\gradlew.bat assembleDebug 2>&1 | Out-String
|
||||
```
|
||||
|
||||
|
|
|
|||
4
.github/skills/android-build/android-dev.ps1
vendored
4
.github/skills/android-build/android-dev.ps1
vendored
|
|
@ -1,6 +1,6 @@
|
|||
<#
|
||||
.SYNOPSIS
|
||||
Zentrales Entwicklungsskript für die Krisenvorrat Android-App.
|
||||
Zentrales Entwicklungsskript für die Bollwerk Android-App.
|
||||
|
||||
.DESCRIPTION
|
||||
Handhabt Build, Deploy und Emulator-Operationen.
|
||||
|
|
@ -57,7 +57,7 @@ $PROJECT_DIR = $PSScriptRoot | Split-Path | Split-Path | Split-Path # .github/s
|
|||
$APK_PATH = "$PROJECT_DIR\app\build\outputs\apk\debug\app-debug.apk"
|
||||
$AVD_NAME = "S24Ultra_API35"
|
||||
$GPU_MODE = "guest" # 'guest' = Software-Rendering im Gast (host/auto/swiftshader scheitern an fehlendem OpenGL Core Profile)
|
||||
$PACKAGE = "de.krisenvorrat.app"
|
||||
$PACKAGE = "de.bollwerk.app"
|
||||
$ACTIVITY = "$PACKAGE/.MainActivity"
|
||||
$BOOT_TIMEOUT = 300 # Sekunden (erster Boot eines neuen AVD kann >2min dauern)
|
||||
$ADB_CONNECT_TIMEOUT = 120 # Sekunden auf ADB-Verbindung warten
|
||||
|
|
|
|||
16
.github/skills/android-device/SKILL.md
vendored
16
.github/skills/android-device/SKILL.md
vendored
|
|
@ -5,7 +5,7 @@ description: "App auf echtes Android-Handy (Samsung S24 Ultra) deployen, USB-Deb
|
|||
|
||||
# Skill: Android Device (Samsung S24 Ultra)
|
||||
|
||||
Deployt die Krisenvorrat-App auf das physische Samsung Galaxy S24 Ultra.
|
||||
Deployt die Bollwerk-App auf das physische Samsung Galaxy S24 Ultra.
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -123,14 +123,14 @@ $adb = "C:\Users\JensR\AppData\Local\Android\Sdk\platform-tools\adb.exe"
|
|||
$dev = "192.168.68.107:42539" # Port prüfen!
|
||||
|
||||
# 1. Build
|
||||
cd X:\krisenvorrat
|
||||
cd X:\bollwerk
|
||||
.\gradlew.bat assembleDebug
|
||||
|
||||
# 2. Install
|
||||
& $adb -s $dev install -r "app\build\outputs\apk\debug\app-debug.apk"
|
||||
|
||||
# 3. Launch
|
||||
& $adb -s $dev shell am start -n de.krisenvorrat.app/.MainActivity
|
||||
& $adb -s $dev shell am start -n de.bollwerk.app/.MainActivity
|
||||
```
|
||||
|
||||
### App installieren
|
||||
|
|
@ -144,19 +144,19 @@ cd X:\krisenvorrat
|
|||
### App starten
|
||||
|
||||
```powershell
|
||||
& $adb -s $dev shell am start -n de.krisenvorrat.app/.MainActivity
|
||||
& $adb -s $dev shell am start -n de.bollwerk.app/.MainActivity
|
||||
```
|
||||
|
||||
### App stoppen
|
||||
|
||||
```powershell
|
||||
& $adb -s $dev shell am force-stop de.krisenvorrat.app
|
||||
& $adb -s $dev shell am force-stop de.bollwerk.app
|
||||
```
|
||||
|
||||
### Logcat (gefiltert auf App)
|
||||
|
||||
```powershell
|
||||
& $adb -s $dev logcat --pid=$(& $adb -s $dev shell pidof de.krisenvorrat.app) -v time
|
||||
& $adb -s $dev logcat --pid=$(& $adb -s $dev shell pidof de.bollwerk.app) -v time
|
||||
```
|
||||
|
||||
### Screenshot vom Gerät
|
||||
|
|
@ -173,7 +173,7 @@ cd X:\krisenvorrat
|
|||
### App deinstallieren
|
||||
|
||||
```powershell
|
||||
& $adb -s $dev uninstall de.krisenvorrat.app
|
||||
& $adb -s $dev uninstall de.bollwerk.app
|
||||
```
|
||||
|
||||
---
|
||||
|
|
@ -206,7 +206,7 @@ Die App ist mit einem anderen Signaturschlüssel installiert.
|
|||
**Lösung:**
|
||||
|
||||
```powershell
|
||||
& $adb -d uninstall de.krisenvorrat.app
|
||||
& $adb -d uninstall de.bollwerk.app
|
||||
& $adb -d install "app\build\outputs\apk\debug\app-debug.apk"
|
||||
```
|
||||
|
||||
|
|
|
|||
8
.github/skills/android-emulator/SKILL.md
vendored
8
.github/skills/android-emulator/SKILL.md
vendored
|
|
@ -5,7 +5,7 @@ description: "Android-Emulator starten, Apps installieren/starten, AVD verwalten
|
|||
|
||||
# Skill: Android Emulator
|
||||
|
||||
Verwaltet den Android-Emulator für die Krisenvorrat-App. Das Standard-AVD simuliert ein Samsung S24 Ultra.
|
||||
Verwaltet den Android-Emulator für die Bollwerk-App. Das Standard-AVD simuliert ein Samsung S24 Ultra.
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -90,19 +90,19 @@ Start-Sleep -Seconds 30
|
|||
### App starten
|
||||
|
||||
```powershell
|
||||
& $adb shell am start -n de.krisenvorrat.app/.MainActivity
|
||||
& $adb shell am start -n de.bollwerk.app/.MainActivity
|
||||
```
|
||||
|
||||
### App stoppen
|
||||
|
||||
```powershell
|
||||
& $adb shell am force-stop de.krisenvorrat.app
|
||||
& $adb shell am force-stop de.bollwerk.app
|
||||
```
|
||||
|
||||
### Logcat (gefiltert)
|
||||
|
||||
```powershell
|
||||
& $adb logcat --pid=$(& $adb shell pidof de.krisenvorrat.app) -v time
|
||||
& $adb logcat --pid=$(& $adb shell pidof de.bollwerk.app) -v time
|
||||
```
|
||||
|
||||
### Screenshot
|
||||
|
|
|
|||
6
.github/skills/gh-tickets/SKILL.md
vendored
6
.github/skills/gh-tickets/SKILL.md
vendored
|
|
@ -5,7 +5,7 @@ description: "Konventionen für GitHub-Issues in diesem Workspace: Aufgabentyp-L
|
|||
|
||||
# Skill: GitHub Tickets (gh-tickets)
|
||||
|
||||
Dieses Dokument definiert die verbindlichen Konventionen für GitHub-Issues im Repository `jreinemann-euris/krisenvorrat`.
|
||||
Dieses Dokument definiert die verbindlichen Konventionen für GitHub-Issues im Repository `jreinemann-euris/bollwerk`.
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -58,7 +58,7 @@ Die Abarbeitungsreihenfolge wird über das **Project Board** gesteuert, nicht ü
|
|||
|
||||
| Eigenschaft | Wert |
|
||||
| ------------- | ----------------------------------------------------------------- |
|
||||
| Projekt-Name | `Krisenvorrat` |
|
||||
| Projekt-Name | `Bollwerk` |
|
||||
| Projekt-Nr | `2` |
|
||||
| Owner | `jreinemann-euris` |
|
||||
| Sortierfeld | `Order` (Number-Feld) |
|
||||
|
|
@ -91,7 +91,7 @@ Ausgabe: `#68 [M] CRM: Erweiterte Kundensuche (Order: 120)`
|
|||
|
||||
```powershell
|
||||
# Issue zum Board hinzufügen
|
||||
gh project item-add 2 --owner jreinemann-euris --url "https://github.com/jreinemann-euris/krisenvorrat/issues/<N>"
|
||||
gh project item-add 2 --owner jreinemann-euris --url "https://github.com/jreinemann-euris/bollwerk/issues/<N>"
|
||||
|
||||
# Order-Wert setzen (erfordert Item-ID und Field-ID)
|
||||
gh project item-edit --id <ITEM_ID> --field-id <ORDER_FIELD_ID> --project-id <PROJECT_ID> --number <ORDER_VALUE>
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ param(
|
|||
[string]$Status = "Todo"
|
||||
)
|
||||
|
||||
$repo = "jreinemann-euris/krisenvorrat"
|
||||
$repo = "jreinemann-euris/bollwerk"
|
||||
$projectId = "PVT_kwHOCFqiJ84BXk9U"
|
||||
$orderFieldId = "PVTF_lAHOCFqiJ84BXk9UzhSw4jo"
|
||||
$statusFieldId = "PVTSSF_lAHOCFqiJ84BXk9UzhSw4es"
|
||||
|
|
|
|||
2
.github/skills/gh-tickets/next-ticket.ps1
vendored
2
.github/skills/gh-tickets/next-ticket.ps1
vendored
|
|
@ -9,7 +9,7 @@
|
|||
#>
|
||||
param([int]$IssueNumber)
|
||||
|
||||
$repo = "jreinemann-euris/krisenvorrat"
|
||||
$repo = "jreinemann-euris/bollwerk"
|
||||
|
||||
if ($IssueNumber -gt 0) {
|
||||
# Variante A: Explizite Issue-Nummer
|
||||
|
|
|
|||
16
.github/skills/publish/SKILL.md
vendored
16
.github/skills/publish/SKILL.md
vendored
|
|
@ -17,13 +17,13 @@ Dieser Skill deckt den vollständigen Workflow ab, um eine neue App-Version auf
|
|||
```
|
||||
App (lokal) VPS (195.246.231.210)
|
||||
───────────── ─────────────────────
|
||||
app/build.gradle.kts /opt/krisenvorrat/
|
||||
versionCode / versionName ├── docker-compose.yml (KRISENVORRAT_APP_VERSION_CODE/NAME)
|
||||
app/build.gradle.kts /opt/bollwerk/
|
||||
versionCode / versionName ├── docker-compose.yml (BOLLWERK_APP_VERSION_CODE/NAME)
|
||||
├── data/app-latest.apk (statisch ausgeliefert)
|
||||
./gradlew assembleDebug └── Server-Container (Ktor)
|
||||
→ app-debug.apk ├── GET / → Homepage mit QR-Code
|
||||
├── GET /api/version → JSON {versionCode, versionName, apkUrl}
|
||||
scp → /opt/krisenvorrat/data/ └── GET /static/* → Dateien aus data/
|
||||
scp → /opt/bollwerk/data/ └── GET /static/* → Dateien aus data/
|
||||
```
|
||||
|
||||
### Wie die Update-Prüfung funktioniert
|
||||
|
|
@ -35,7 +35,7 @@ scp → /opt/krisenvorrat/data/ └── GET /static/* → Dateie
|
|||
### Wie die Homepage funktioniert
|
||||
|
||||
- `GET /` liefert HTML mit QR-Code (via qrcodejs) + Download-Link auf `/static/app-latest.apk`
|
||||
- Version wird aus `KRISENVORRAT_APP_VERSION_CODE` / `KRISENVORRAT_APP_VERSION_NAME` Env-Vars gelesen
|
||||
- Version wird aus `BOLLWERK_APP_VERSION_CODE` / `BOLLWERK_APP_VERSION_NAME` Env-Vars gelesen
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -58,7 +58,7 @@ Die APK liegt danach unter: `app/build/outputs/apk/debug/app-debug.apk`
|
|||
### Schritt 3 – APK auf VPS hochladen
|
||||
|
||||
```powershell
|
||||
scp app/build/outputs/apk/debug/app-debug.apk root@195.246.231.210:/opt/krisenvorrat/data/app-latest.apk
|
||||
scp app/build/outputs/apk/debug/app-debug.apk root@195.246.231.210:/opt/bollwerk/data/app-latest.apk
|
||||
```
|
||||
|
||||
**Voraussetzung:** SSH-Agent muss laufen und Key geladen sein (siehe vps-deploy Skill).
|
||||
|
|
@ -69,19 +69,19 @@ Die Version wird über Environment-Variablen in der `docker-compose.yml` auf dem
|
|||
|
||||
```powershell
|
||||
# Neue Werte per sed in docker-compose.yml eintragen
|
||||
ssh root@195.246.231.210 "cd /opt/krisenvorrat && sed -i 's/KRISENVORRAT_APP_VERSION_CODE=.*/KRISENVORRAT_APP_VERSION_CODE=<neuer_code>/' docker-compose.yml && sed -i 's/KRISENVORRAT_APP_VERSION_NAME=.*/KRISENVORRAT_APP_VERSION_NAME=<neuer_name>/' docker-compose.yml"
|
||||
ssh root@195.246.231.210 "cd /opt/bollwerk && sed -i 's/BOLLWERK_APP_VERSION_CODE=.*/BOLLWERK_APP_VERSION_CODE=<neuer_code>/' docker-compose.yml && sed -i 's/BOLLWERK_APP_VERSION_NAME=.*/BOLLWERK_APP_VERSION_NAME=<neuer_name>/' docker-compose.yml"
|
||||
```
|
||||
|
||||
Falls die Env-Vars noch nicht in der docker-compose.yml stehen, müssen sie einmalig hinzugefügt werden:
|
||||
|
||||
```powershell
|
||||
ssh root@195.246.231.210 "cd /opt/krisenvorrat && sed -i '/KRISENVORRAT_JWT_SECRET/a\ - KRISENVORRAT_APP_VERSION_CODE=<code>\n - KRISENVORRAT_APP_VERSION_NAME=<name>' docker-compose.yml"
|
||||
ssh root@195.246.231.210 "cd /opt/bollwerk && sed -i '/BOLLWERK_JWT_SECRET/a\ - BOLLWERK_APP_VERSION_CODE=<code>\n - BOLLWERK_APP_VERSION_NAME=<name>' docker-compose.yml"
|
||||
```
|
||||
|
||||
### Schritt 5 – Server neustarten
|
||||
|
||||
```powershell
|
||||
ssh root@195.246.231.210 "cd /opt/krisenvorrat && docker compose up -d"
|
||||
ssh root@195.246.231.210 "cd /opt/bollwerk && docker compose up -d"
|
||||
```
|
||||
|
||||
### Schritt 6 – Verifizieren
|
||||
|
|
|
|||
10
.github/skills/publish/publish-apk.ps1
vendored
10
.github/skills/publish/publish-apk.ps1
vendored
|
|
@ -1,6 +1,6 @@
|
|||
<#
|
||||
.SYNOPSIS
|
||||
Publiziert eine APK auf den Krisenvorrat VPS.
|
||||
Publiziert eine APK auf den Bollwerk VPS.
|
||||
.DESCRIPTION
|
||||
Lädt die APK auf den VPS hoch, aktualisiert die Version in der
|
||||
docker-compose.yml und startet den Server-Container neu.
|
||||
|
|
@ -22,7 +22,7 @@ param(
|
|||
|
||||
$ErrorActionPreference = "Stop"
|
||||
$VPS = "root@195.246.231.210"
|
||||
$RemoteDir = "/opt/krisenvorrat"
|
||||
$RemoteDir = "/opt/bollwerk"
|
||||
|
||||
# --- Preflight ---
|
||||
Write-Host "=== Publish APK v$VersionName (build $VersionCode) ===" -ForegroundColor Cyan
|
||||
|
|
@ -51,7 +51,7 @@ Write-Host "[OK] APK hochgeladen" -ForegroundColor Green
|
|||
Write-Host "`n[2/4] Version in docker-compose.yml aktualisieren..." -ForegroundColor Yellow
|
||||
|
||||
# Prüfen ob Env-Vars bereits vorhanden sind (bash-Syntax in einfachen Anführungszeichen)
|
||||
$checkCmd = 'grep -c "KRISENVORRAT_APP_VERSION_CODE" ' + $RemoteDir + '/docker-compose.yml 2>/dev/null || echo 0'
|
||||
$checkCmd = 'grep -c "BOLLWERK_APP_VERSION_CODE" ' + $RemoteDir + '/docker-compose.yml 2>/dev/null || echo 0'
|
||||
$checkResult = ssh $VPS $checkCmd
|
||||
# SSH kann Array zurückgeben (z.B. Banner + Ergebnis) - letzte Zeile nehmen
|
||||
if ($checkResult -is [array]) { $checkResult = $checkResult[-1] }
|
||||
|
|
@ -59,11 +59,11 @@ $hasVersionCode = [int]($checkResult.Trim())
|
|||
|
||||
if ($hasVersionCode -gt 0) {
|
||||
# Update bestehende Einträge
|
||||
$sedCmd = "cd $RemoteDir; sed -i 's/KRISENVORRAT_APP_VERSION_CODE=.*/KRISENVORRAT_APP_VERSION_CODE=$VersionCode/' docker-compose.yml; sed -i 's/KRISENVORRAT_APP_VERSION_NAME=.*/KRISENVORRAT_APP_VERSION_NAME=$VersionName/' docker-compose.yml"
|
||||
$sedCmd = "cd $RemoteDir; sed -i 's/BOLLWERK_APP_VERSION_CODE=.*/BOLLWERK_APP_VERSION_CODE=$VersionCode/' docker-compose.yml; sed -i 's/BOLLWERK_APP_VERSION_NAME=.*/BOLLWERK_APP_VERSION_NAME=$VersionName/' docker-compose.yml"
|
||||
ssh $VPS $sedCmd
|
||||
} else {
|
||||
# Erstmalig hinzufügen (nach JWT_SECRET-Zeile)
|
||||
$addCmd = "cd $RemoteDir; sed -i '/KRISENVORRAT_JWT_SECRET/a\ - KRISENVORRAT_APP_VERSION_CODE=$VersionCode' docker-compose.yml; sed -i '/KRISENVORRAT_APP_VERSION_CODE/a\ - KRISENVORRAT_APP_VERSION_NAME=$VersionName' docker-compose.yml"
|
||||
$addCmd = "cd $RemoteDir; sed -i '/BOLLWERK_JWT_SECRET/a\ - BOLLWERK_APP_VERSION_CODE=$VersionCode' docker-compose.yml; sed -i '/BOLLWERK_APP_VERSION_CODE/a\ - BOLLWERK_APP_VERSION_NAME=$VersionName' docker-compose.yml"
|
||||
ssh $VPS $addCmd
|
||||
}
|
||||
if ($LASTEXITCODE -ne 0) { Write-Error "Version-Update fehlgeschlagen."; exit 1 }
|
||||
|
|
|
|||
2
.github/skills/ship/watch-pipeline.ps1
vendored
2
.github/skills/ship/watch-pipeline.ps1
vendored
|
|
@ -21,7 +21,7 @@ param(
|
|||
[string]$ExpectedSha = ""
|
||||
)
|
||||
|
||||
$repo = "jreinemann-euris/krisenvorrat"
|
||||
$repo = "jreinemann-euris/bollwerk"
|
||||
$poll = 10
|
||||
|
||||
# --- Warten ---
|
||||
|
|
|
|||
44
.github/skills/vps-deploy/SKILL.md
vendored
44
.github/skills/vps-deploy/SKILL.md
vendored
|
|
@ -5,7 +5,7 @@ description: "Server auf den VPS (1984 Hosting, Island) deployen, Docker-Contain
|
|||
|
||||
# Skill: VPS Deploy
|
||||
|
||||
Deployt den Krisenvorrat Ktor-Server auf den 1984 Hosting VPS in Island.
|
||||
Deployt den Bollwerk Ktor-Server auf den 1984 Hosting VPS in Island.
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -23,7 +23,7 @@ Deployt den Krisenvorrat Ktor-Server auf den 1984 Hosting VPS in Island.
|
|||
| Disk | 25 GB SSD |
|
||||
| Transfer | 1 TB/Monat |
|
||||
| Docker | Docker CE 29.x + docker-compose-plugin |
|
||||
| App-Verzeichnis | `/opt/krisenvorrat/` |
|
||||
| App-Verzeichnis | `/opt/bollwerk/` |
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -59,7 +59,7 @@ ssh-add -l
|
|||
| Fingerprint | `SHA256:J/qjVt9r8CqnoshZFQWutau+3KG7JxDzRLHPyX41+gA` |
|
||||
| Private Key | `C:\Users\JensR\.ssh\id_ed25519` (passphrase-geschützt) |
|
||||
| Public Key | `C:\Users\JensR\.ssh\id_ed25519.pub` |
|
||||
| Kommentar | `krisenvorrat-vps` |
|
||||
| Kommentar | `bollwerk-vps` |
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -69,27 +69,27 @@ ssh-add -l
|
|||
|
||||
```powershell
|
||||
# 1. Fat-JAR lokal bauen
|
||||
cd x:\krisenvorrat
|
||||
cd x:\bollwerk
|
||||
.\gradlew.bat :server:buildFatJar
|
||||
|
||||
# 2. JAR auf VPS kopieren
|
||||
scp x:\krisenvorrat\server\build\libs\server.jar root@195.246.231.210:/opt/krisenvorrat/server.jar
|
||||
scp x:\bollwerk\server\build\libs\server.jar root@195.246.231.210:/opt/bollwerk/server.jar
|
||||
|
||||
# 3. Container neu bauen und starten
|
||||
ssh root@195.246.231.210 "cd /opt/krisenvorrat && docker compose up -d --build"
|
||||
ssh root@195.246.231.210 "cd /opt/bollwerk && docker compose up -d --build"
|
||||
```
|
||||
|
||||
### Nur Container neustarten (ohne neues JAR)
|
||||
|
||||
```powershell
|
||||
ssh root@195.246.231.210 "cd /opt/krisenvorrat && docker compose restart"
|
||||
ssh root@195.246.231.210 "cd /opt/bollwerk && docker compose restart"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Docker-Konfiguration auf dem VPS
|
||||
|
||||
### Dockerfile (`/opt/krisenvorrat/Dockerfile`)
|
||||
### Dockerfile (`/opt/bollwerk/Dockerfile`)
|
||||
|
||||
```dockerfile
|
||||
FROM eclipse-temurin:21-jre-alpine
|
||||
|
|
@ -101,18 +101,18 @@ ENTRYPOINT ["java", "-Xmx384m", "-jar", "server.jar"]
|
|||
|
||||
**Hinweis:** `-Xmx384m` begrenzt den JVM-Heap, weil der VPS nur 1 GB RAM hat.
|
||||
|
||||
### docker-compose.yml (`/opt/krisenvorrat/docker-compose.yml`)
|
||||
### docker-compose.yml (`/opt/bollwerk/docker-compose.yml`)
|
||||
|
||||
```yaml
|
||||
services:
|
||||
krisenvorrat:
|
||||
bollwerk:
|
||||
build: .
|
||||
container_name: krisenvorrat-server
|
||||
container_name: bollwerk-server
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- '8080:8080'
|
||||
environment:
|
||||
- KRISENVORRAT_JWT_SECRET=<secret>
|
||||
- BOLLWERK_JWT_SECRET=<secret>
|
||||
volumes:
|
||||
- ./data:/app/data
|
||||
```
|
||||
|
|
@ -130,14 +130,14 @@ Der Server nutzt JWT-basierte Authentifizierung (kein API-Key mehr).
|
|||
- **Admin-UI:** `http://195.246.231.210:8080/admin/`
|
||||
- **Admin-User:** `admin`
|
||||
- **Admin-Passwort:** Der User muss das Passwort selbst eingeben. Es ist NICHT gespeichert – bei Bedarf den User fragen.
|
||||
- Beim ersten Start ohne `KRISENVORRAT_ADMIN_PASSWORD` ENV wird ein zufälliges Passwort generiert und in die Logs geschrieben.
|
||||
- Beim ersten Start ohne `BOLLWERK_ADMIN_PASSWORD` ENV wird ein zufälliges Passwort generiert und in die Logs geschrieben.
|
||||
|
||||
### Environment-Variablen
|
||||
|
||||
| Variable | Pflicht | Beschreibung |
|
||||
| ------------------------------- | ------- | --------------------------------------------------- |
|
||||
| `KRISENVORRAT_JWT_SECRET` | ja | Secret für JWT-Token-Signierung (mind. 32 Zeichen) |
|
||||
| `KRISENVORRAT_ADMIN_PASSWORD` | nein | Admin-Passwort beim ersten Start (sonst auto-gen.) |
|
||||
| `BOLLWERK_JWT_SECRET` | ja | Secret für JWT-Token-Signierung (mind. 32 Zeichen) |
|
||||
| `BOLLWERK_ADMIN_PASSWORD` | nein | Admin-Passwort beim ersten Start (sonst auto-gen.) |
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -173,10 +173,10 @@ ssh root@195.246.231.210 "docker ps"
|
|||
|
||||
```powershell
|
||||
# Letzte 50 Zeilen
|
||||
ssh root@195.246.231.210 "docker logs krisenvorrat-server --tail 50"
|
||||
ssh root@195.246.231.210 "docker logs bollwerk-server --tail 50"
|
||||
|
||||
# Live-Logs (Ctrl+C zum Beenden)
|
||||
ssh root@195.246.231.210 "docker logs krisenvorrat-server -f"
|
||||
ssh root@195.246.231.210 "docker logs bollwerk-server -f"
|
||||
```
|
||||
|
||||
### Health-Check
|
||||
|
|
@ -192,9 +192,9 @@ ssh root@195.246.231.210 "curl -s http://localhost:8080/api/health"
|
|||
### Container stoppen/starten
|
||||
|
||||
```powershell
|
||||
ssh root@195.246.231.210 "cd /opt/krisenvorrat && docker compose stop"
|
||||
ssh root@195.246.231.210 "cd /opt/krisenvorrat && docker compose start"
|
||||
ssh root@195.246.231.210 "cd /opt/krisenvorrat && docker compose down" # Container entfernen
|
||||
ssh root@195.246.231.210 "cd /opt/bollwerk && docker compose stop"
|
||||
ssh root@195.246.231.210 "cd /opt/bollwerk && docker compose start"
|
||||
ssh root@195.246.231.210 "cd /opt/bollwerk && docker compose down" # Container entfernen
|
||||
```
|
||||
|
||||
### RAM-Nutzung prüfen
|
||||
|
|
@ -205,7 +205,7 @@ ssh root@195.246.231.210 "free -h && echo '---' && docker stats --no-stream"
|
|||
|
||||
### Daten-Persistenz
|
||||
|
||||
Die SQLite-Datenbank wird unter `/opt/krisenvorrat/data/` auf dem Host gemountet und überlebt Container-Neustarts.
|
||||
Die SQLite-Datenbank wird unter `/opt/bollwerk/data/` auf dem Host gemountet und überlebt Container-Neustarts.
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -214,5 +214,5 @@ Die SQLite-Datenbank wird unter `/opt/krisenvorrat/data/` auf dem Host gemountet
|
|||
- **1 GB RAM:** JVM-Heap auf 384 MB begrenzt. Kein Spielraum für weitere Dienste.
|
||||
- **Kein HTTPS:** Server läuft aktuell nur auf HTTP Port 8080. Für HTTPS → Caddy als Reverse Proxy einrichten.
|
||||
- **Kein CI/CD:** Deployment ist manuell (JAR bauen → scp → docker compose up). Ggf. GitHub Actions Pipeline ergänzen.
|
||||
- **Dockerfile lokal:** Das Dockerfile auf dem VPS (`/opt/krisenvorrat/Dockerfile`) ist ein schlankes Runtime-Only-Image. Das Multi-Stage-Dockerfile im Repo-Root ist für lokale Builds gedacht.
|
||||
- **Dockerfile lokal:** Das Dockerfile auf dem VPS (`/opt/bollwerk/Dockerfile`) ist ein schlankes Runtime-Only-Image. Das Multi-Stage-Dockerfile im Repo-Root ist für lokale Builds gedacht.
|
||||
- **SSH-Escape-Problem:** Beim Schreiben von Dateien via SSH-Heredoc werden JSON-Quotes zerstört. Dateien immer lokal erstellen und per `scp` hochladen.
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
# Krisenvorrat Inventar-App – Anforderungen
|
||||
# Bollwerk Inventar-App – Anforderungen
|
||||
|
||||
**Version:** 1.0
|
||||
**Datum:** 2026-05-13
|
||||
|
|
@ -8,7 +8,7 @@
|
|||
|
||||
## 1. Projektziel
|
||||
|
||||
Eine native Android-App zur Verwaltung eines Krisenvorrats-Inventars. Die App speichert alle Daten lokal als JSON und ermöglicht späteren Datenaustausch über einen REST-Server. Verteilung erfolgt via APK-Sideloading (kein Google Play Store) – rein privater Gebrauch.
|
||||
Eine native Android-App zur Verwaltung eines Bollwerks-Inventars. Die App speichert alle Daten lokal als JSON und ermöglicht späteren Datenaustausch über einen REST-Server. Verteilung erfolgt via APK-Sideloading (kein Google Play Store) – rein privater Gebrauch.
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -117,7 +117,7 @@ Eine native Android-App zur Verwaltung eines Krisenvorrats-Inventars. Die App sp
|
|||
- **Design:** Klar, funktional, industriell – Material 3 Komponenten
|
||||
- **Navigation:** Bottom Navigation Bar (Übersicht / Inventur / Warnungen / Einstellungen)
|
||||
- **Eingabe:** Große Touch-Targets, Dropdown für Einheiten/Kategorien/Lagerorte
|
||||
- **Farbschema:** Dark Theme (Dunkelgrün / Anthrazit) – Krisenvorrat-Ästhetik, gut lesbar
|
||||
- **Farbschema:** Dark Theme (Dunkelgrün / Anthrazit) – Bollwerk-Ästhetik, gut lesbar
|
||||
|
||||
---
|
||||
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ Requirements file: anforderungen-v1.md + Anforderungen/design/requirements.md
|
|||
| Name | Seed-Hex | Primär (Dark) | Charakter | M3-kompatibel | Lesbarkeit | Score |
|
||||
| ----------------------- | --------- | ------------------- | ----------------------------------------- | ------------- | ---------- | ----- |
|
||||
| A1 – Forest Green | `#2E7D32` | `#6EC072` (tone 80) | Klassisch dunkelgrün, bekannt, klar | ✅ | ✅ | 8 |
|
||||
| A2 – Olivgrün / Militär | `#4A6741` | `#9CCB91` (tone 80) | Gedeckt, olivfarben, "Krisenvorrat"-Thema | ✅ | ✅ | 9 |
|
||||
| A2 – Olivgrün / Militär | `#4A6741` | `#9CCB91` (tone 80) | Gedeckt, olivfarben, "Bollwerk"-Thema | ✅ | ✅ | 9 |
|
||||
| A3 – Dunkelgrün Pure | `#1B5E20` | `#54BA5B` (tone 80) | Sehr satt, fast schwarz-grün, industriell | ✅ | ✅ | 7 |
|
||||
| A4 – Waldgrün warm | `#3A5F3A` | `#8FCC8F` (tone 80) | Warm, natürlich, dezent | ✅ | ✅ | 8 |
|
||||
|
||||
|
|
@ -28,13 +28,13 @@ Requirements file: anforderungen-v1.md + Anforderungen/design/requirements.md
|
|||
|
||||
- ✅ Must: Alle erfüllt
|
||||
- ✅ Should: Erkennbarer Charakter, solide Kontraste
|
||||
- ⚠️ Missing: Nicht maximale "Krisenvorrat"-Eigenständigkeit – wirkt leicht wie Standard-Material-Grün
|
||||
- ⚠️ Missing: Nicht maximale "Bollwerk"-Eigenständigkeit – wirkt leicht wie Standard-Material-Grün
|
||||
|
||||
#### A2 – Olivgrün / Militärgrün (`#4A6741`)
|
||||
|
||||
**Charakter:** Gedämpftes Oliv-Grün, militärische/Outdoor-Assoziation. Sehr gut zum Krisenvorrat-Kontext.
|
||||
**Charakter:** Gedämpftes Oliv-Grün, militärische/Outdoor-Assoziation. Sehr gut zum Bollwerk-Kontext.
|
||||
**Dark-Theme-Primary:** ~`#9CCB91` – warmes, helles Olivgrün auf dunklem Hintergrund.
|
||||
**Surfaces (Dark):** `#14191A` – leicht grünlich-anthrazit, sehr angenehm für den Ausdruck "Krisenvorrat".
|
||||
**Surfaces (Dark):** `#14191A` – leicht grünlich-anthrazit, sehr angenehm für den Ausdruck "Bollwerk".
|
||||
|
||||
- ✅ Must: Alle erfüllt
|
||||
- ✅ Should: Maximale thematische Eigenständigkeit, excellent Lesbarkeit
|
||||
|
|
@ -86,7 +86,7 @@ MaterialTheme(colorScheme = DarkColorScheme) { ... }
|
|||
```
|
||||
|
||||
- ✅ Funktioniert auf allen Android-Versionen
|
||||
- ✅ Konsistente "Krisenvorrat"-Markenidentität bei jedem User
|
||||
- ✅ Konsistente "Bollwerk"-Markenidentität bei jedem User
|
||||
- ✅ Einfache Implementierung, geringer Wartungsaufwand
|
||||
- ✅ Die grün/anthrazite Ästhetik wird IMMER angezeigt
|
||||
|
||||
|
|
@ -100,12 +100,12 @@ val colorScheme = if (Build.VERSION.SDK_INT >= 31) {
|
|||
|
||||
- 🔴 Verliert grüne Ästhetik – App sieht aus wie jede andere App
|
||||
- 🔴 Schließt Android 8–11 aus (>30% Marktanteil)
|
||||
- ❌ Does not fit: "Krisenvorrat-Ästhetik" ist explizit gefordert
|
||||
- ❌ Does not fit: "Bollwerk-Ästhetik" ist explizit gefordert
|
||||
|
||||
#### B3 – Hybrid
|
||||
|
||||
- ⚠️ Komplexität ohne echten Mehrwert für diesen Use Case
|
||||
- ⚠️ Auf Android 12+ weicht die "Krisenvorrat"-Ästhetik ab
|
||||
- ⚠️ Auf Android 12+ weicht die "Bollwerk"-Ästhetik ab
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -224,13 +224,13 @@ Decided by: User
|
|||
### A – Seed Color
|
||||
|
||||
**Gewählt:** `#4A6741` (Olivgrün / Militärgrün)
|
||||
**Begründung:** Passt thematisch optimal zum Krisenvorrat-Kontext. Material 3 generiert daraus einen anthrazitgrünen Dark-Theme-Look mit dezenter Grün-Tönung der Surfaces.
|
||||
**Begründung:** Passt thematisch optimal zum Bollwerk-Kontext. Material 3 generiert daraus einen anthrazitgrünen Dark-Theme-Look mit dezenter Grün-Tönung der Surfaces.
|
||||
**Alternativen:** `#2E7D32` (Forest Green, zu generisch), `#1B5E20` (zu dunkel), `#3A5F3A` (zu ähnlich zu Forest Green)
|
||||
|
||||
### B – Dynamic Color
|
||||
|
||||
**Gewählt:** Fixed Custom Palette (B1)
|
||||
**Begründung:** App-Identität ("Krisenvorrat"-Ästhetik) muss konsistent bleiben. Dynamic Color würde das grüne Branding überschreiben. Fixed Palette funktioniert auf allen Android-Versionen.
|
||||
**Begründung:** App-Identität ("Bollwerk"-Ästhetik) muss konsistent bleiben. Dynamic Color würde das grüne Branding überschreiben. Fixed Palette funktioniert auf allen Android-Versionen.
|
||||
**Alternativen:** Dynamic Color (verliert Branding), Hybrid (unnötige Komplexität)
|
||||
|
||||
### C – Typography
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Technology Requirements – DB-Migrationsstrategie
|
||||
|
||||
Date: 2026-05-17
|
||||
Author: Krisenvorrat-Projekt
|
||||
Author: Bollwerk-Projekt
|
||||
|
||||
## Must-Have (eliminators)
|
||||
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ Vor der Implementierung der ersten UI-Screens müssen vier visuelle Designentsch
|
|||
|
||||
- **Stil:** Klar, funktional, industriell
|
||||
- **UI-Framework:** Material 3 Komponenten
|
||||
- **Farbschema:** Dark Theme, Dunkelgrün / Anthrazit – "Krisenvorrat-Ästhetik", gut lesbar
|
||||
- **Farbschema:** Dark Theme, Dunkelgrün / Anthrazit – "Bollwerk-Ästhetik", gut lesbar
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -29,7 +29,7 @@ Vor der Implementierung der ersten UI-Screens müssen vier visuelle Designentsch
|
|||
|
||||
### Should-Have
|
||||
|
||||
- "Waldgrün / Olivgrün / Militärgrün"-Anmutung (passt zum Thema Krisenvorrat)
|
||||
- "Waldgrün / Olivgrün / Militärgrün"-Anmutung (passt zum Thema Bollwerk)
|
||||
- Anthrazit-Töne für Oberflächen (nicht reines Schwarz, nicht Hellgrau)
|
||||
- Erkennbarer visueller Charakter – App soll eigenständig aussehen
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
|
||||
## Kontext
|
||||
|
||||
Die Krisenvorrat-App (Android/Kotlin) benötigt in Phase 2 einen REST-Server für die Synchronisierung und das Sharing des Inventars zwischen mehreren Geräten. Der Server wird im privaten Umfeld eingesetzt (2–10 Geräte, wenig Last) und soll einfach auf einem kleinen Linux-VPS oder Homeserver deploybar sein.
|
||||
Die Bollwerk-App (Android/Kotlin) benötigt in Phase 2 einen REST-Server für die Synchronisierung und das Sharing des Inventars zwischen mehreren Geräten. Der Server wird im privaten Umfeld eingesetzt (2–10 Geräte, wenig Last) und soll einfach auf einem kleinen Linux-VPS oder Homeserver deploybar sein.
|
||||
|
||||
Das bestehende Client-Datenmodell nutzt kotlinx.serialization für JSON-Export/Import.
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ Author: Tech-Decision Workflow
|
|||
|
||||
## Kontext
|
||||
|
||||
Die Krisenvorrat-App (Android/Kotlin) speichert in v1.0 alle Daten lokal (Room/SQLite). In Phase 2 soll ein REST-Server hinzukommen, der die Synchronisierung und das Sharing des Inventars zwischen mehreren Geräten ermöglicht.
|
||||
Die Bollwerk-App (Android/Kotlin) speichert in v1.0 alle Daten lokal (Room/SQLite). In Phase 2 soll ein REST-Server hinzukommen, der die Synchronisierung und das Sharing des Inventars zwischen mehreren Geräten ermöglicht.
|
||||
|
||||
**Einsatzszenario:**
|
||||
|
||||
|
|
|
|||
18
README.md
18
README.md
|
|
@ -1,6 +1,6 @@
|
|||
# Krisenvorrat
|
||||
# Bollwerk
|
||||
|
||||
Android-App zur Verwaltung eines Krisenvorrats-Inventars mit lokaler Datenhaltung und Sync-Möglichkeit über einen LAN-Server.
|
||||
Android-App zur Verwaltung eines Bollwerks-Inventars mit lokaler Datenhaltung und Sync-Möglichkeit über einen LAN-Server.
|
||||
|
||||
## Projektstruktur
|
||||
|
||||
|
|
@ -94,15 +94,15 @@ java -jar server/build/libs/server.jar
|
|||
|
||||
```bash
|
||||
# Image bauen
|
||||
docker build -t krisenvorrat-server .
|
||||
docker build -t bollwerk-server .
|
||||
|
||||
# Container starten
|
||||
docker run -d \
|
||||
--name krisenvorrat \
|
||||
--name bollwerk \
|
||||
-p 8080:8080 \
|
||||
-e KRISENVORRAT_API_KEY="mein-sicherer-api-key" \
|
||||
-v krisenvorrat-data:/app/data \
|
||||
krisenvorrat-server
|
||||
-e BOLLWERK_API_KEY="mein-sicherer-api-key" \
|
||||
-v bollwerk-data:/app/data \
|
||||
bollwerk-server
|
||||
```
|
||||
|
||||
### LAN-Setup
|
||||
|
|
@ -113,7 +113,7 @@ docker run -d \
|
|||
- 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`
|
||||
- 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:**
|
||||
|
|
@ -134,7 +134,7 @@ docker run -d \
|
|||
|
||||
| Variable | Standard | Beschreibung |
|
||||
|-----------------------|-------------------------------------------------|-------------------|
|
||||
| `KRISENVORRAT_API_KEY` | `change-me-to-a-secure-key-at-least-32-chars` | API-Key für Auth |
|
||||
| `BOLLWERK_API_KEY` | `change-me-to-a-secure-key-at-least-32-chars` | API-Key für Auth |
|
||||
|
||||
### Sicherheitshinweise
|
||||
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@ plugins {
|
|||
}
|
||||
|
||||
android {
|
||||
namespace = "de.krisenvorrat.app"
|
||||
namespace = "de.bollwerk.app"
|
||||
compileSdk = 35
|
||||
|
||||
defaultConfig {
|
||||
applicationId = "de.krisenvorrat.app"
|
||||
applicationId = "de.bollwerk.app"
|
||||
minSdk = 26
|
||||
targetSdk = 35
|
||||
versionCode = 3
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
package de.krisenvorrat.app.data.db
|
||||
package de.bollwerk.app.data.db
|
||||
|
||||
import androidx.room.Room
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||
import androidx.test.platform.app.InstrumentationRegistry
|
||||
import de.krisenvorrat.app.data.db.entity.CategoryEntity
|
||||
import de.krisenvorrat.app.data.db.entity.LocationEntity
|
||||
import de.bollwerk.app.data.db.entity.CategoryEntity
|
||||
import de.bollwerk.app.data.db.entity.LocationEntity
|
||||
import kotlinx.coroutines.flow.first
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import org.junit.After
|
||||
|
|
@ -22,9 +22,9 @@ import org.junit.runner.RunWith
|
|||
* Neue AutoMigrations werden automatisch durch Room validiert.
|
||||
*/
|
||||
@RunWith(AndroidJUnit4::class)
|
||||
internal class KrisenvorratDatabaseMigrationTest {
|
||||
internal class BollwerkDatabaseMigrationTest {
|
||||
|
||||
private val dbName = "krisenvorrat-migration-test.db"
|
||||
private val dbName = "bollwerk-migration-test.db"
|
||||
private val context get() = InstrumentationRegistry.getInstrumentation().targetContext
|
||||
|
||||
@Before
|
||||
|
|
@ -39,7 +39,7 @@ internal class KrisenvorratDatabaseMigrationTest {
|
|||
|
||||
@Test
|
||||
fun freshInstall_allTablesExist() {
|
||||
val db = Room.inMemoryDatabaseBuilder(context, KrisenvorratDatabase::class.java)
|
||||
val db = Room.inMemoryDatabaseBuilder(context, BollwerkDatabase::class.java)
|
||||
.build()
|
||||
try {
|
||||
val tables = mutableListOf<String>()
|
||||
|
|
@ -64,7 +64,7 @@ internal class KrisenvorratDatabaseMigrationTest {
|
|||
|
||||
@Test
|
||||
fun freshInstall_crudOperationsWork() {
|
||||
val db = Room.inMemoryDatabaseBuilder(context, KrisenvorratDatabase::class.java)
|
||||
val db = Room.inMemoryDatabaseBuilder(context, BollwerkDatabase::class.java)
|
||||
.build()
|
||||
try {
|
||||
runBlocking {
|
||||
|
|
@ -1,10 +1,10 @@
|
|||
package de.krisenvorrat.app.data.db.dao
|
||||
package de.bollwerk.app.data.db.dao
|
||||
|
||||
import androidx.room.Room
|
||||
import androidx.test.core.app.ApplicationProvider
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||
import de.krisenvorrat.app.data.db.KrisenvorratDatabase
|
||||
import de.krisenvorrat.app.data.db.entity.CategoryEntity
|
||||
import de.bollwerk.app.data.db.BollwerkDatabase
|
||||
import de.bollwerk.app.data.db.entity.CategoryEntity
|
||||
import kotlinx.coroutines.flow.first
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import org.junit.After
|
||||
|
|
@ -17,14 +17,14 @@ import org.junit.runner.RunWith
|
|||
@RunWith(AndroidJUnit4::class)
|
||||
internal class CategoryDaoTest {
|
||||
|
||||
private lateinit var db: KrisenvorratDatabase
|
||||
private lateinit var db: BollwerkDatabase
|
||||
private lateinit var dao: CategoryDao
|
||||
|
||||
@Before
|
||||
fun setup() {
|
||||
db = Room.inMemoryDatabaseBuilder(
|
||||
ApplicationProvider.getApplicationContext(),
|
||||
KrisenvorratDatabase::class.java
|
||||
BollwerkDatabase::class.java
|
||||
).allowMainThreadQueries().build()
|
||||
dao = db.categoryDao()
|
||||
}
|
||||
|
|
@ -1,12 +1,12 @@
|
|||
package de.krisenvorrat.app.data.db.dao
|
||||
package de.bollwerk.app.data.db.dao
|
||||
|
||||
import androidx.room.Room
|
||||
import androidx.test.core.app.ApplicationProvider
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||
import de.krisenvorrat.app.data.db.KrisenvorratDatabase
|
||||
import de.krisenvorrat.app.data.db.entity.CategoryEntity
|
||||
import de.krisenvorrat.app.data.db.entity.ItemEntity
|
||||
import de.krisenvorrat.app.data.db.entity.LocationEntity
|
||||
import de.bollwerk.app.data.db.BollwerkDatabase
|
||||
import de.bollwerk.app.data.db.entity.CategoryEntity
|
||||
import de.bollwerk.app.data.db.entity.ItemEntity
|
||||
import de.bollwerk.app.data.db.entity.LocationEntity
|
||||
import kotlinx.coroutines.flow.first
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import org.junit.After
|
||||
|
|
@ -20,14 +20,14 @@ import java.time.LocalDate
|
|||
@RunWith(AndroidJUnit4::class)
|
||||
internal class ItemDaoTest {
|
||||
|
||||
private lateinit var db: KrisenvorratDatabase
|
||||
private lateinit var db: BollwerkDatabase
|
||||
private lateinit var dao: ItemDao
|
||||
|
||||
@Before
|
||||
fun setup() {
|
||||
db = Room.inMemoryDatabaseBuilder(
|
||||
ApplicationProvider.getApplicationContext(),
|
||||
KrisenvorratDatabase::class.java
|
||||
BollwerkDatabase::class.java
|
||||
).allowMainThreadQueries().build()
|
||||
dao = db.itemDao()
|
||||
runBlocking {
|
||||
|
|
@ -1,10 +1,10 @@
|
|||
package de.krisenvorrat.app.data.db.dao
|
||||
package de.bollwerk.app.data.db.dao
|
||||
|
||||
import androidx.room.Room
|
||||
import androidx.test.core.app.ApplicationProvider
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||
import de.krisenvorrat.app.data.db.KrisenvorratDatabase
|
||||
import de.krisenvorrat.app.data.db.entity.LocationEntity
|
||||
import de.bollwerk.app.data.db.BollwerkDatabase
|
||||
import de.bollwerk.app.data.db.entity.LocationEntity
|
||||
import kotlinx.coroutines.flow.first
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import org.junit.After
|
||||
|
|
@ -17,14 +17,14 @@ import org.junit.runner.RunWith
|
|||
@RunWith(AndroidJUnit4::class)
|
||||
internal class LocationDaoTest {
|
||||
|
||||
private lateinit var db: KrisenvorratDatabase
|
||||
private lateinit var db: BollwerkDatabase
|
||||
private lateinit var dao: LocationDao
|
||||
|
||||
@Before
|
||||
fun setup() {
|
||||
db = Room.inMemoryDatabaseBuilder(
|
||||
ApplicationProvider.getApplicationContext(),
|
||||
KrisenvorratDatabase::class.java
|
||||
BollwerkDatabase::class.java
|
||||
).allowMainThreadQueries().build()
|
||||
dao = db.locationDao()
|
||||
}
|
||||
|
|
@ -1,10 +1,10 @@
|
|||
package de.krisenvorrat.app.data.db.dao
|
||||
package de.bollwerk.app.data.db.dao
|
||||
|
||||
import androidx.room.Room
|
||||
import androidx.test.core.app.ApplicationProvider
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||
import de.krisenvorrat.app.data.db.KrisenvorratDatabase
|
||||
import de.krisenvorrat.app.data.db.entity.SettingsEntity
|
||||
import de.bollwerk.app.data.db.BollwerkDatabase
|
||||
import de.bollwerk.app.data.db.entity.SettingsEntity
|
||||
import kotlinx.coroutines.flow.first
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import org.junit.After
|
||||
|
|
@ -17,14 +17,14 @@ import org.junit.runner.RunWith
|
|||
@RunWith(AndroidJUnit4::class)
|
||||
internal class SettingsDaoTest {
|
||||
|
||||
private lateinit var db: KrisenvorratDatabase
|
||||
private lateinit var db: BollwerkDatabase
|
||||
private lateinit var dao: SettingsDao
|
||||
|
||||
@Before
|
||||
fun setup() {
|
||||
db = Room.inMemoryDatabaseBuilder(
|
||||
ApplicationProvider.getApplicationContext(),
|
||||
KrisenvorratDatabase::class.java
|
||||
BollwerkDatabase::class.java
|
||||
).allowMainThreadQueries().build()
|
||||
dao = db.settingsDao()
|
||||
}
|
||||
|
|
@ -1,10 +1,10 @@
|
|||
package de.krisenvorrat.app.di
|
||||
package de.bollwerk.app.di
|
||||
|
||||
import android.content.Context
|
||||
import androidx.room.Room
|
||||
import androidx.test.core.app.ApplicationProvider
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||
import de.krisenvorrat.app.data.db.KrisenvorratDatabase
|
||||
import de.bollwerk.app.data.db.BollwerkDatabase
|
||||
import org.junit.After
|
||||
import org.junit.Assert.assertNotNull
|
||||
import org.junit.Test
|
||||
|
|
@ -13,7 +13,7 @@ import org.junit.runner.RunWith
|
|||
@RunWith(AndroidJUnit4::class)
|
||||
internal class DatabaseModuleTest {
|
||||
|
||||
private lateinit var db: KrisenvorratDatabase
|
||||
private lateinit var db: BollwerkDatabase
|
||||
|
||||
@After
|
||||
fun tearDown() {
|
||||
|
|
@ -29,7 +29,7 @@ internal class DatabaseModuleTest {
|
|||
val module = DatabaseModule
|
||||
|
||||
// When
|
||||
db = Room.inMemoryDatabaseBuilder(context, KrisenvorratDatabase::class.java)
|
||||
db = Room.inMemoryDatabaseBuilder(context, BollwerkDatabase::class.java)
|
||||
.allowMainThreadQueries()
|
||||
.build()
|
||||
val itemDao = module.provideItemDao(db)
|
||||
|
|
@ -5,19 +5,19 @@
|
|||
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
|
||||
|
||||
<application
|
||||
android:name=".KrisenvorratApp"
|
||||
android:name=".BollwerkApp"
|
||||
android:allowBackup="true"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:label="@string/app_name"
|
||||
android:roundIcon="@mipmap/ic_launcher_round"
|
||||
android:supportsRtl="true"
|
||||
android:usesCleartextTraffic="true"
|
||||
android:theme="@style/Theme.Krisenvorrat">
|
||||
android:theme="@style/Theme.Bollwerk">
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:exported="true"
|
||||
android:label="@string/app_name"
|
||||
android:theme="@style/Theme.Krisenvorrat">
|
||||
android:theme="@style/Theme.Bollwerk">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
package de.krisenvorrat.app
|
||||
package de.bollwerk.app
|
||||
|
||||
import android.app.Application
|
||||
import dagger.hilt.android.HiltAndroidApp
|
||||
|
||||
@HiltAndroidApp
|
||||
class KrisenvorratApp : Application()
|
||||
class BollwerkApp : Application()
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package de.krisenvorrat.app
|
||||
package de.bollwerk.app
|
||||
|
||||
import android.os.Bundle
|
||||
import androidx.activity.ComponentActivity
|
||||
|
|
@ -10,9 +10,9 @@ import androidx.compose.runtime.Composable
|
|||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import de.krisenvorrat.app.domain.usecase.SeedDatabaseUseCase
|
||||
import de.krisenvorrat.app.ui.MainScreen
|
||||
import de.krisenvorrat.app.ui.theme.KrisenvorratTheme
|
||||
import de.bollwerk.app.domain.usecase.SeedDatabaseUseCase
|
||||
import de.bollwerk.app.ui.MainScreen
|
||||
import de.bollwerk.app.ui.theme.BollwerkTheme
|
||||
import kotlinx.coroutines.launch
|
||||
import javax.inject.Inject
|
||||
|
||||
|
|
@ -26,7 +26,7 @@ class MainActivity : ComponentActivity() {
|
|||
lifecycleScope.launch { seedDatabaseUseCase() }
|
||||
enableEdgeToEdge()
|
||||
setContent {
|
||||
KrisenvorratTheme {
|
||||
BollwerkTheme {
|
||||
MainScreen()
|
||||
}
|
||||
}
|
||||
|
|
@ -36,9 +36,9 @@ class MainActivity : ComponentActivity() {
|
|||
@Preview(showBackground = true)
|
||||
@Composable
|
||||
fun DefaultPreview() {
|
||||
KrisenvorratTheme {
|
||||
BollwerkTheme {
|
||||
Text(
|
||||
text = "Krisenvorrat",
|
||||
text = "Bollwerk",
|
||||
style = MaterialTheme.typography.headlineLarge
|
||||
)
|
||||
}
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
package de.bollwerk.app.data.db
|
||||
|
||||
import androidx.room.Database
|
||||
import androidx.room.RoomDatabase
|
||||
import androidx.room.TypeConverters
|
||||
import de.bollwerk.app.data.db.dao.CategoryDao
|
||||
import de.bollwerk.app.data.db.dao.ItemDao
|
||||
import de.bollwerk.app.data.db.dao.LocationDao
|
||||
import de.bollwerk.app.data.db.dao.MessageDao
|
||||
import de.bollwerk.app.data.db.dao.PendingSyncOpDao
|
||||
import de.bollwerk.app.data.db.dao.SettingsDao
|
||||
import de.bollwerk.app.data.db.entity.CategoryEntity
|
||||
import de.bollwerk.app.data.db.entity.ItemEntity
|
||||
import de.bollwerk.app.data.db.entity.LocationEntity
|
||||
import de.bollwerk.app.data.db.entity.MessageEntity
|
||||
import de.bollwerk.app.data.db.entity.PendingSyncOpEntity
|
||||
import de.bollwerk.app.data.db.entity.SettingsEntity
|
||||
|
||||
@Database(
|
||||
entities = [CategoryEntity::class, LocationEntity::class, ItemEntity::class, SettingsEntity::class, PendingSyncOpEntity::class, MessageEntity::class],
|
||||
version = 6,
|
||||
exportSchema = true
|
||||
)
|
||||
@TypeConverters(LocalDateConverter::class)
|
||||
internal abstract class BollwerkDatabase : RoomDatabase() {
|
||||
abstract fun categoryDao(): CategoryDao
|
||||
abstract fun locationDao(): LocationDao
|
||||
abstract fun itemDao(): ItemDao
|
||||
abstract fun settingsDao(): SettingsDao
|
||||
abstract fun pendingSyncOpDao(): PendingSyncOpDao
|
||||
abstract fun messageDao(): MessageDao
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package de.krisenvorrat.app.data.db
|
||||
package de.bollwerk.app.data.db
|
||||
|
||||
import androidx.room.TypeConverter
|
||||
import java.time.LocalDate
|
||||
|
|
@ -1,16 +1,16 @@
|
|||
package de.krisenvorrat.app.data.db
|
||||
package de.bollwerk.app.data.db
|
||||
|
||||
/**
|
||||
* Room-Migrationen der Krisenvorrat-Datenbank.
|
||||
* Room-Migrationen der Bollwerk-Datenbank.
|
||||
*
|
||||
* Ab Version 6 nutzt die App Room @AutoMigration für Schema-Änderungen.
|
||||
* Manuelle Migrationen werden nur noch benötigt, wenn AutoMigration nicht
|
||||
* ausreicht (z.B. Table-Rebuild, Daten-Transformation).
|
||||
*
|
||||
* Checkliste für neue Schema-Änderungen:
|
||||
* 1. DB-Version in [KrisenvorratDatabase] hochzählen
|
||||
* 1. DB-Version in [BollwerkDatabase] hochzählen
|
||||
* 2. @AutoMigration(from = X, to = Y) in der @Database-Annotation ergänzen
|
||||
* 3. Falls AutoMigration nicht reicht: Migration(X, Y) hier ergänzen
|
||||
* und in [de.krisenvorrat.app.di.DatabaseModule].addMigrations() eintragen
|
||||
* und in [de.bollwerk.app.di.DatabaseModule].addMigrations() eintragen
|
||||
*/
|
||||
internal object Migrations
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package de.krisenvorrat.app.data.db.dao
|
||||
package de.bollwerk.app.data.db.dao
|
||||
|
||||
import androidx.room.Dao
|
||||
import androidx.room.Delete
|
||||
|
|
@ -6,7 +6,7 @@ import androidx.room.Insert
|
|||
import androidx.room.Query
|
||||
import androidx.room.Update
|
||||
import androidx.room.Upsert
|
||||
import de.krisenvorrat.app.data.db.entity.CategoryEntity
|
||||
import de.bollwerk.app.data.db.entity.CategoryEntity
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
||||
@Dao
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package de.krisenvorrat.app.data.db.dao
|
||||
package de.bollwerk.app.data.db.dao
|
||||
|
||||
import androidx.room.Dao
|
||||
import androidx.room.Delete
|
||||
|
|
@ -6,7 +6,7 @@ import androidx.room.Insert
|
|||
import androidx.room.Query
|
||||
import androidx.room.Update
|
||||
import androidx.room.Upsert
|
||||
import de.krisenvorrat.app.data.db.entity.ItemEntity
|
||||
import de.bollwerk.app.data.db.entity.ItemEntity
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import java.time.LocalDate
|
||||
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package de.krisenvorrat.app.data.db.dao
|
||||
package de.bollwerk.app.data.db.dao
|
||||
|
||||
import androidx.room.Dao
|
||||
import androidx.room.Delete
|
||||
|
|
@ -6,7 +6,7 @@ import androidx.room.Insert
|
|||
import androidx.room.Query
|
||||
import androidx.room.Update
|
||||
import androidx.room.Upsert
|
||||
import de.krisenvorrat.app.data.db.entity.LocationEntity
|
||||
import de.bollwerk.app.data.db.entity.LocationEntity
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
||||
@Dao
|
||||
|
|
@ -1,11 +1,11 @@
|
|||
package de.krisenvorrat.app.data.db.dao
|
||||
package de.bollwerk.app.data.db.dao
|
||||
|
||||
import androidx.room.Dao
|
||||
import androidx.room.Insert
|
||||
import androidx.room.OnConflictStrategy
|
||||
import androidx.room.Query
|
||||
import androidx.room.Upsert
|
||||
import de.krisenvorrat.app.data.db.entity.MessageEntity
|
||||
import de.bollwerk.app.data.db.entity.MessageEntity
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
||||
@Dao
|
||||
|
|
@ -1,10 +1,10 @@
|
|||
package de.krisenvorrat.app.data.db.dao
|
||||
package de.bollwerk.app.data.db.dao
|
||||
|
||||
import androidx.room.Dao
|
||||
import androidx.room.Insert
|
||||
import androidx.room.OnConflictStrategy
|
||||
import androidx.room.Query
|
||||
import de.krisenvorrat.app.data.db.entity.PendingSyncOpEntity
|
||||
import de.bollwerk.app.data.db.entity.PendingSyncOpEntity
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
||||
@Dao
|
||||
|
|
@ -1,9 +1,9 @@
|
|||
package de.krisenvorrat.app.data.db.dao
|
||||
package de.bollwerk.app.data.db.dao
|
||||
|
||||
import androidx.room.Dao
|
||||
import androidx.room.Query
|
||||
import androidx.room.Upsert
|
||||
import de.krisenvorrat.app.data.db.entity.SettingsEntity
|
||||
import de.bollwerk.app.data.db.entity.SettingsEntity
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
||||
@Dao
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package de.krisenvorrat.app.data.db.entity
|
||||
package de.bollwerk.app.data.db.entity
|
||||
|
||||
import androidx.room.ColumnInfo
|
||||
import androidx.room.Entity
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package de.krisenvorrat.app.data.db.entity
|
||||
package de.bollwerk.app.data.db.entity
|
||||
|
||||
import androidx.room.ColumnInfo
|
||||
import androidx.room.Entity
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package de.krisenvorrat.app.data.db.entity
|
||||
package de.bollwerk.app.data.db.entity
|
||||
|
||||
import androidx.room.ColumnInfo
|
||||
import androidx.room.Entity
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package de.krisenvorrat.app.data.db.entity
|
||||
package de.bollwerk.app.data.db.entity
|
||||
|
||||
import androidx.room.ColumnInfo
|
||||
import androidx.room.Entity
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package de.krisenvorrat.app.data.db.entity
|
||||
package de.bollwerk.app.data.db.entity
|
||||
|
||||
import androidx.room.ColumnInfo
|
||||
import androidx.room.Entity
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package de.krisenvorrat.app.data.db.entity
|
||||
package de.bollwerk.app.data.db.entity
|
||||
|
||||
import androidx.room.ColumnInfo
|
||||
import androidx.room.Entity
|
||||
|
|
@ -1,8 +1,8 @@
|
|||
package de.krisenvorrat.app.data.export
|
||||
package de.bollwerk.app.data.export
|
||||
|
||||
import de.krisenvorrat.app.data.db.entity.CategoryEntity
|
||||
import de.krisenvorrat.app.data.db.entity.ItemEntity
|
||||
import de.krisenvorrat.app.data.db.entity.LocationEntity
|
||||
import de.bollwerk.app.data.db.entity.CategoryEntity
|
||||
import de.bollwerk.app.data.db.entity.ItemEntity
|
||||
import de.bollwerk.app.data.db.entity.LocationEntity
|
||||
import java.time.format.DateTimeFormatter
|
||||
import java.util.Locale
|
||||
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package de.krisenvorrat.app.data.export
|
||||
package de.bollwerk.app.data.export
|
||||
|
||||
internal fun interface DatabaseTransaction {
|
||||
suspend fun execute(block: suspend () -> Unit)
|
||||
|
|
@ -1,22 +1,22 @@
|
|||
package de.krisenvorrat.app.data.export
|
||||
package de.bollwerk.app.data.export
|
||||
|
||||
import de.krisenvorrat.app.data.db.dao.CategoryDao
|
||||
import de.krisenvorrat.app.data.db.dao.ItemDao
|
||||
import de.krisenvorrat.app.data.db.dao.LocationDao
|
||||
import de.krisenvorrat.app.data.db.dao.SettingsDao
|
||||
import de.krisenvorrat.app.data.db.entity.CategoryEntity
|
||||
import de.krisenvorrat.app.data.db.entity.ItemEntity
|
||||
import de.krisenvorrat.app.data.db.entity.LocationEntity
|
||||
import de.krisenvorrat.app.data.db.entity.SettingsEntity
|
||||
import de.krisenvorrat.app.domain.model.SettingsKeys
|
||||
import de.krisenvorrat.app.domain.model.parseAgeGroupsFromJson
|
||||
import de.krisenvorrat.app.domain.model.totalDailyKcal
|
||||
import de.krisenvorrat.app.domain.repository.ImportExportRepository
|
||||
import de.krisenvorrat.shared.model.CategoryDto
|
||||
import de.krisenvorrat.shared.model.InventoryDto
|
||||
import de.krisenvorrat.shared.model.ItemDto
|
||||
import de.krisenvorrat.shared.model.LocationDto
|
||||
import de.krisenvorrat.shared.model.SettingDto
|
||||
import de.bollwerk.app.data.db.dao.CategoryDao
|
||||
import de.bollwerk.app.data.db.dao.ItemDao
|
||||
import de.bollwerk.app.data.db.dao.LocationDao
|
||||
import de.bollwerk.app.data.db.dao.SettingsDao
|
||||
import de.bollwerk.app.data.db.entity.CategoryEntity
|
||||
import de.bollwerk.app.data.db.entity.ItemEntity
|
||||
import de.bollwerk.app.data.db.entity.LocationEntity
|
||||
import de.bollwerk.app.data.db.entity.SettingsEntity
|
||||
import de.bollwerk.app.domain.model.SettingsKeys
|
||||
import de.bollwerk.app.domain.model.parseAgeGroupsFromJson
|
||||
import de.bollwerk.app.domain.model.totalDailyKcal
|
||||
import de.bollwerk.app.domain.repository.ImportExportRepository
|
||||
import de.bollwerk.shared.model.CategoryDto
|
||||
import de.bollwerk.shared.model.InventoryDto
|
||||
import de.bollwerk.shared.model.ItemDto
|
||||
import de.bollwerk.shared.model.LocationDto
|
||||
import de.bollwerk.shared.model.SettingDto
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.flow.first
|
||||
import kotlinx.coroutines.withContext
|
||||
|
|
@ -151,7 +151,7 @@ internal class ImportExportRepositoryImpl @Inject constructor(
|
|||
val dateFormatter = DateTimeFormatter.ofPattern("dd.MM.yyyy", Locale.GERMAN)
|
||||
|
||||
val sb = StringBuilder()
|
||||
sb.appendLine("# Krisenvorrat Inventar")
|
||||
sb.appendLine("# Bollwerk Inventar")
|
||||
sb.appendLine()
|
||||
|
||||
for (category in categories) {
|
||||
|
|
@ -1,11 +1,11 @@
|
|||
package de.krisenvorrat.app.data.export
|
||||
package de.bollwerk.app.data.export
|
||||
|
||||
import android.graphics.Paint
|
||||
import android.graphics.Typeface
|
||||
import android.graphics.pdf.PdfDocument
|
||||
import de.krisenvorrat.app.data.db.entity.CategoryEntity
|
||||
import de.krisenvorrat.app.data.db.entity.ItemEntity
|
||||
import de.krisenvorrat.app.data.db.entity.LocationEntity
|
||||
import de.bollwerk.app.data.db.entity.CategoryEntity
|
||||
import de.bollwerk.app.data.db.entity.ItemEntity
|
||||
import de.bollwerk.app.data.db.entity.LocationEntity
|
||||
import java.io.File
|
||||
import java.io.FileOutputStream
|
||||
import java.time.LocalDate
|
||||
|
|
@ -64,7 +64,7 @@ internal object PdfExporter {
|
|||
}
|
||||
|
||||
// Title
|
||||
canvas.drawText("Krisenvorrat Inventar", MARGIN_LEFT, yPos, titlePaint)
|
||||
canvas.drawText("Bollwerk Inventar", MARGIN_LEFT, yPos, titlePaint)
|
||||
yPos += 8f
|
||||
canvas.drawText(
|
||||
"Erstellt am ${LocalDate.now().format(DATE_FORMATTER)}",
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
package de.krisenvorrat.app.data.remote
|
||||
package de.bollwerk.app.data.remote
|
||||
|
||||
import de.krisenvorrat.app.domain.model.ItemFormPrefill
|
||||
import de.bollwerk.app.domain.model.ItemFormPrefill
|
||||
import io.ktor.client.HttpClient
|
||||
import io.ktor.client.call.body
|
||||
import io.ktor.client.request.bearerAuth
|
||||
|
|
@ -1,10 +1,10 @@
|
|||
package de.krisenvorrat.app.data.repository
|
||||
package de.bollwerk.app.data.repository
|
||||
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import androidx.core.content.FileProvider
|
||||
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||
import de.krisenvorrat.app.domain.usecase.ApkInstaller
|
||||
import de.bollwerk.app.domain.usecase.ApkInstaller
|
||||
import java.io.File
|
||||
import javax.inject.Inject
|
||||
|
||||
|
|
@ -1,8 +1,8 @@
|
|||
package de.krisenvorrat.app.data.repository
|
||||
package de.bollwerk.app.data.repository
|
||||
|
||||
import de.krisenvorrat.app.data.db.dao.CategoryDao
|
||||
import de.krisenvorrat.app.data.db.entity.CategoryEntity
|
||||
import de.krisenvorrat.app.domain.repository.CategoryRepository
|
||||
import de.bollwerk.app.data.db.dao.CategoryDao
|
||||
import de.bollwerk.app.data.db.entity.CategoryEntity
|
||||
import de.bollwerk.app.domain.repository.CategoryRepository
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.withContext
|
||||
|
|
@ -1,18 +1,18 @@
|
|||
package de.krisenvorrat.app.data.repository
|
||||
package de.bollwerk.app.data.repository
|
||||
|
||||
import de.krisenvorrat.app.data.db.dao.ItemDao
|
||||
import de.krisenvorrat.app.data.db.dao.PendingSyncOpDao
|
||||
import de.krisenvorrat.app.data.db.entity.ItemEntity
|
||||
import de.krisenvorrat.app.data.db.entity.PendingSyncOpEntity
|
||||
import de.krisenvorrat.app.data.sync.WebSocketClient
|
||||
import de.krisenvorrat.app.data.sync.WebSocketEvent
|
||||
import de.krisenvorrat.app.di.ApplicationScope
|
||||
import de.krisenvorrat.app.domain.model.SettingsKey.StringKey
|
||||
import de.krisenvorrat.app.domain.model.SyncError
|
||||
import de.krisenvorrat.app.domain.repository.ItemRepository
|
||||
import de.krisenvorrat.app.domain.repository.SettingsRepository
|
||||
import de.krisenvorrat.app.domain.repository.SyncService
|
||||
import de.krisenvorrat.shared.model.ItemDto
|
||||
import de.bollwerk.app.data.db.dao.ItemDao
|
||||
import de.bollwerk.app.data.db.dao.PendingSyncOpDao
|
||||
import de.bollwerk.app.data.db.entity.ItemEntity
|
||||
import de.bollwerk.app.data.db.entity.PendingSyncOpEntity
|
||||
import de.bollwerk.app.data.sync.WebSocketClient
|
||||
import de.bollwerk.app.data.sync.WebSocketEvent
|
||||
import de.bollwerk.app.di.ApplicationScope
|
||||
import de.bollwerk.app.domain.model.SettingsKey.StringKey
|
||||
import de.bollwerk.app.domain.model.SyncError
|
||||
import de.bollwerk.app.domain.repository.ItemRepository
|
||||
import de.bollwerk.app.domain.repository.SettingsRepository
|
||||
import de.bollwerk.app.domain.repository.SyncService
|
||||
import de.bollwerk.shared.model.ItemDto
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
|
@ -1,8 +1,8 @@
|
|||
package de.krisenvorrat.app.data.repository
|
||||
package de.bollwerk.app.data.repository
|
||||
|
||||
import de.krisenvorrat.app.data.db.dao.LocationDao
|
||||
import de.krisenvorrat.app.data.db.entity.LocationEntity
|
||||
import de.krisenvorrat.app.domain.repository.LocationRepository
|
||||
import de.bollwerk.app.data.db.dao.LocationDao
|
||||
import de.bollwerk.app.data.db.entity.LocationEntity
|
||||
import de.bollwerk.app.domain.repository.LocationRepository
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.withContext
|
||||
|
|
@ -1,15 +1,15 @@
|
|||
package de.krisenvorrat.app.data.repository
|
||||
package de.bollwerk.app.data.repository
|
||||
|
||||
import de.krisenvorrat.app.data.db.dao.MessageDao
|
||||
import de.krisenvorrat.app.data.db.entity.MessageEntity
|
||||
import de.krisenvorrat.app.data.sync.WebSocketClient
|
||||
import de.krisenvorrat.app.data.sync.WebSocketEvent
|
||||
import de.krisenvorrat.app.di.ApplicationScope
|
||||
import de.krisenvorrat.app.domain.model.SettingsKey.StringKey
|
||||
import de.krisenvorrat.app.domain.model.SyncError
|
||||
import de.krisenvorrat.app.domain.repository.MessageRepository
|
||||
import de.krisenvorrat.app.domain.repository.SettingsRepository
|
||||
import de.krisenvorrat.shared.model.UserListItemDto
|
||||
import de.bollwerk.app.data.db.dao.MessageDao
|
||||
import de.bollwerk.app.data.db.entity.MessageEntity
|
||||
import de.bollwerk.app.data.sync.WebSocketClient
|
||||
import de.bollwerk.app.data.sync.WebSocketEvent
|
||||
import de.bollwerk.app.di.ApplicationScope
|
||||
import de.bollwerk.app.domain.model.SettingsKey.StringKey
|
||||
import de.bollwerk.app.domain.model.SyncError
|
||||
import de.bollwerk.app.domain.repository.MessageRepository
|
||||
import de.bollwerk.app.domain.repository.SettingsRepository
|
||||
import de.bollwerk.shared.model.UserListItemDto
|
||||
import io.ktor.client.HttpClient
|
||||
import io.ktor.client.call.body
|
||||
import io.ktor.client.request.get
|
||||
|
|
@ -1,11 +1,11 @@
|
|||
package de.krisenvorrat.app.data.repository
|
||||
package de.bollwerk.app.data.repository
|
||||
|
||||
import de.krisenvorrat.app.data.db.dao.SettingsDao
|
||||
import de.krisenvorrat.app.data.db.entity.SettingsEntity
|
||||
import de.krisenvorrat.app.data.security.SecureTokenStorage
|
||||
import de.krisenvorrat.app.domain.model.SettingsKey
|
||||
import de.krisenvorrat.app.domain.model.SettingsKeys
|
||||
import de.krisenvorrat.app.domain.repository.SettingsRepository
|
||||
import de.bollwerk.app.data.db.dao.SettingsDao
|
||||
import de.bollwerk.app.data.db.entity.SettingsEntity
|
||||
import de.bollwerk.app.data.security.SecureTokenStorage
|
||||
import de.bollwerk.app.domain.model.SettingsKey
|
||||
import de.bollwerk.app.domain.model.SettingsKeys
|
||||
import de.bollwerk.app.domain.repository.SettingsRepository
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.map
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
package de.krisenvorrat.app.data.repository
|
||||
package de.bollwerk.app.data.repository
|
||||
|
||||
import de.krisenvorrat.app.domain.model.VersionInfo
|
||||
import de.krisenvorrat.app.domain.repository.UpdateRepository
|
||||
import de.bollwerk.app.domain.model.VersionInfo
|
||||
import de.bollwerk.app.domain.repository.UpdateRepository
|
||||
import io.ktor.client.HttpClient
|
||||
import io.ktor.client.call.body
|
||||
import io.ktor.client.request.get
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package de.krisenvorrat.app.data.security
|
||||
package de.bollwerk.app.data.security
|
||||
|
||||
import android.content.Context
|
||||
import android.content.SharedPreferences
|
||||
|
|
@ -13,7 +13,7 @@ internal class EncryptedPrefsTokenStorage(context: Context) : SecureTokenStorage
|
|||
.build()
|
||||
EncryptedSharedPreferences.create(
|
||||
context,
|
||||
"krisenvorrat_secure_prefs",
|
||||
"bollwerk_secure_prefs",
|
||||
masterKey,
|
||||
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
|
||||
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package de.krisenvorrat.app.data.security
|
||||
package de.bollwerk.app.data.security
|
||||
|
||||
internal interface SecureTokenStorage {
|
||||
fun get(key: String): String?
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package de.krisenvorrat.app.data.sync
|
||||
package de.bollwerk.app.data.sync
|
||||
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package de.krisenvorrat.app.data.sync
|
||||
package de.bollwerk.app.data.sync
|
||||
|
||||
internal sealed interface ConnectionState {
|
||||
data object Connected : ConnectionState
|
||||
|
|
@ -1,13 +1,13 @@
|
|||
package de.krisenvorrat.app.data.sync
|
||||
package de.bollwerk.app.data.sync
|
||||
|
||||
import de.krisenvorrat.app.domain.model.SettingsKey.StringKey
|
||||
import de.krisenvorrat.app.domain.model.SyncError
|
||||
import de.krisenvorrat.app.domain.repository.SettingsRepository
|
||||
import de.krisenvorrat.app.domain.repository.SyncService
|
||||
import de.krisenvorrat.shared.model.CreateInventoryRequest
|
||||
import de.krisenvorrat.shared.model.InventoryDto
|
||||
import de.krisenvorrat.shared.model.InventoryInfoDto
|
||||
import de.krisenvorrat.shared.model.ItemDto
|
||||
import de.bollwerk.app.domain.model.SettingsKey.StringKey
|
||||
import de.bollwerk.app.domain.model.SyncError
|
||||
import de.bollwerk.app.domain.repository.SettingsRepository
|
||||
import de.bollwerk.app.domain.repository.SyncService
|
||||
import de.bollwerk.shared.model.CreateInventoryRequest
|
||||
import de.bollwerk.shared.model.InventoryDto
|
||||
import de.bollwerk.shared.model.InventoryInfoDto
|
||||
import de.bollwerk.shared.model.ItemDto
|
||||
import io.ktor.client.HttpClient
|
||||
import io.ktor.client.call.body
|
||||
import io.ktor.client.request.delete
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
package de.krisenvorrat.app.data.sync
|
||||
package de.bollwerk.app.data.sync
|
||||
|
||||
import de.krisenvorrat.shared.model.MessageDto
|
||||
import de.bollwerk.shared.model.MessageDto
|
||||
import kotlinx.coroutines.flow.SharedFlow
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package de.krisenvorrat.app.data.sync
|
||||
package de.bollwerk.app.data.sync
|
||||
|
||||
import io.ktor.client.HttpClient
|
||||
import io.ktor.client.engine.okhttp.OkHttp
|
||||
|
|
@ -120,7 +120,7 @@ internal class WebSocketClientImpl @Inject constructor() : WebSocketClient {
|
|||
"inventoryUpdated" -> _events.emit(WebSocketEvent.InventoryUpdated(event.itemId ?: ""))
|
||||
"fullSyncRequired" -> _events.emit(WebSocketEvent.FullSyncRequired)
|
||||
"new_message" -> {
|
||||
val msg = de.krisenvorrat.shared.model.MessageDto(
|
||||
val msg = de.bollwerk.shared.model.MessageDto(
|
||||
id = event.id ?: return,
|
||||
senderId = event.senderId ?: return,
|
||||
senderUsername = event.senderUsername ?: return,
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package de.krisenvorrat.app.di
|
||||
package de.bollwerk.app.di
|
||||
|
||||
import javax.inject.Qualifier
|
||||
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package de.krisenvorrat.app.di
|
||||
package de.bollwerk.app.di
|
||||
|
||||
import android.content.Context
|
||||
import androidx.room.Room
|
||||
|
|
@ -10,14 +10,14 @@ import dagger.Provides
|
|||
import dagger.hilt.InstallIn
|
||||
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||
import dagger.hilt.components.SingletonComponent
|
||||
import de.krisenvorrat.app.data.db.KrisenvorratDatabase
|
||||
import de.krisenvorrat.app.data.db.dao.CategoryDao
|
||||
import de.krisenvorrat.app.data.db.dao.ItemDao
|
||||
import de.krisenvorrat.app.data.db.dao.LocationDao
|
||||
import de.krisenvorrat.app.data.db.dao.MessageDao
|
||||
import de.krisenvorrat.app.data.db.dao.PendingSyncOpDao
|
||||
import de.krisenvorrat.app.data.db.dao.SettingsDao
|
||||
import de.krisenvorrat.app.data.export.DatabaseTransaction
|
||||
import de.bollwerk.app.data.db.BollwerkDatabase
|
||||
import de.bollwerk.app.data.db.dao.CategoryDao
|
||||
import de.bollwerk.app.data.db.dao.ItemDao
|
||||
import de.bollwerk.app.data.db.dao.LocationDao
|
||||
import de.bollwerk.app.data.db.dao.MessageDao
|
||||
import de.bollwerk.app.data.db.dao.PendingSyncOpDao
|
||||
import de.bollwerk.app.data.db.dao.SettingsDao
|
||||
import de.bollwerk.app.data.export.DatabaseTransaction
|
||||
import javax.inject.Singleton
|
||||
|
||||
@Module
|
||||
|
|
@ -26,8 +26,8 @@ internal object DatabaseModule {
|
|||
|
||||
@Provides
|
||||
@Singleton
|
||||
fun provideDatabase(@ApplicationContext context: Context): KrisenvorratDatabase =
|
||||
Room.databaseBuilder(context, KrisenvorratDatabase::class.java, "krisenvorrat.db")
|
||||
fun provideDatabase(@ApplicationContext context: Context): BollwerkDatabase =
|
||||
Room.databaseBuilder(context, BollwerkDatabase::class.java, "bollwerk.db")
|
||||
.addCallback(DefaultDataCallback)
|
||||
.fallbackToDestructiveMigration()
|
||||
.build()
|
||||
|
|
@ -51,25 +51,25 @@ internal object DatabaseModule {
|
|||
}
|
||||
|
||||
@Provides
|
||||
fun provideItemDao(db: KrisenvorratDatabase): ItemDao = db.itemDao()
|
||||
fun provideItemDao(db: BollwerkDatabase): ItemDao = db.itemDao()
|
||||
|
||||
@Provides
|
||||
fun provideCategoryDao(db: KrisenvorratDatabase): CategoryDao = db.categoryDao()
|
||||
fun provideCategoryDao(db: BollwerkDatabase): CategoryDao = db.categoryDao()
|
||||
|
||||
@Provides
|
||||
fun provideLocationDao(db: KrisenvorratDatabase): LocationDao = db.locationDao()
|
||||
fun provideLocationDao(db: BollwerkDatabase): LocationDao = db.locationDao()
|
||||
|
||||
@Provides
|
||||
fun providePendingSyncOpDao(db: KrisenvorratDatabase): PendingSyncOpDao = db.pendingSyncOpDao()
|
||||
fun providePendingSyncOpDao(db: BollwerkDatabase): PendingSyncOpDao = db.pendingSyncOpDao()
|
||||
|
||||
@Provides
|
||||
fun provideSettingsDao(db: KrisenvorratDatabase): SettingsDao = db.settingsDao()
|
||||
fun provideSettingsDao(db: BollwerkDatabase): SettingsDao = db.settingsDao()
|
||||
|
||||
@Provides
|
||||
fun provideMessageDao(db: KrisenvorratDatabase): MessageDao = db.messageDao()
|
||||
fun provideMessageDao(db: BollwerkDatabase): MessageDao = db.messageDao()
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
fun provideDatabaseTransaction(db: KrisenvorratDatabase): DatabaseTransaction =
|
||||
fun provideDatabaseTransaction(db: BollwerkDatabase): DatabaseTransaction =
|
||||
DatabaseTransaction { block -> db.withTransaction(block) }
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package de.krisenvorrat.app.di
|
||||
package de.bollwerk.app.di
|
||||
|
||||
import javax.inject.Qualifier
|
||||
|
||||
|
|
@ -1,16 +1,16 @@
|
|||
package de.krisenvorrat.app.di
|
||||
package de.bollwerk.app.di
|
||||
|
||||
import dagger.Binds
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
import dagger.hilt.InstallIn
|
||||
import dagger.hilt.components.SingletonComponent
|
||||
import de.krisenvorrat.app.data.remote.OpenAiVisionService
|
||||
import de.krisenvorrat.app.data.remote.OpenAiVisionServiceImpl
|
||||
import de.krisenvorrat.app.data.sync.SyncServiceImpl
|
||||
import de.krisenvorrat.app.data.sync.WebSocketClient
|
||||
import de.krisenvorrat.app.data.sync.WebSocketClientImpl
|
||||
import de.krisenvorrat.app.domain.repository.SyncService
|
||||
import de.bollwerk.app.data.remote.OpenAiVisionService
|
||||
import de.bollwerk.app.data.remote.OpenAiVisionServiceImpl
|
||||
import de.bollwerk.app.data.sync.SyncServiceImpl
|
||||
import de.bollwerk.app.data.sync.WebSocketClient
|
||||
import de.bollwerk.app.data.sync.WebSocketClientImpl
|
||||
import de.bollwerk.app.domain.repository.SyncService
|
||||
import io.ktor.client.HttpClient
|
||||
import io.ktor.client.engine.okhttp.OkHttp
|
||||
import io.ktor.client.plugins.contentnegotiation.ContentNegotiation
|
||||
|
|
@ -1,25 +1,25 @@
|
|||
package de.krisenvorrat.app.di
|
||||
package de.bollwerk.app.di
|
||||
|
||||
import dagger.Binds
|
||||
import dagger.Module
|
||||
import dagger.hilt.InstallIn
|
||||
import dagger.hilt.components.SingletonComponent
|
||||
import de.krisenvorrat.app.data.export.ImportExportRepositoryImpl
|
||||
import de.krisenvorrat.app.data.repository.ApkInstallerImpl
|
||||
import de.krisenvorrat.app.data.repository.CategoryRepositoryImpl
|
||||
import de.krisenvorrat.app.data.repository.ItemRepositoryImpl
|
||||
import de.krisenvorrat.app.data.repository.LocationRepositoryImpl
|
||||
import de.krisenvorrat.app.data.repository.MessageRepositoryImpl
|
||||
import de.krisenvorrat.app.data.repository.SettingsRepositoryImpl
|
||||
import de.krisenvorrat.app.data.repository.UpdateRepositoryImpl
|
||||
import de.krisenvorrat.app.domain.repository.CategoryRepository
|
||||
import de.krisenvorrat.app.domain.repository.ImportExportRepository
|
||||
import de.krisenvorrat.app.domain.repository.ItemRepository
|
||||
import de.krisenvorrat.app.domain.repository.LocationRepository
|
||||
import de.krisenvorrat.app.domain.repository.MessageRepository
|
||||
import de.krisenvorrat.app.domain.repository.SettingsRepository
|
||||
import de.krisenvorrat.app.domain.repository.UpdateRepository
|
||||
import de.krisenvorrat.app.domain.usecase.ApkInstaller
|
||||
import de.bollwerk.app.data.export.ImportExportRepositoryImpl
|
||||
import de.bollwerk.app.data.repository.ApkInstallerImpl
|
||||
import de.bollwerk.app.data.repository.CategoryRepositoryImpl
|
||||
import de.bollwerk.app.data.repository.ItemRepositoryImpl
|
||||
import de.bollwerk.app.data.repository.LocationRepositoryImpl
|
||||
import de.bollwerk.app.data.repository.MessageRepositoryImpl
|
||||
import de.bollwerk.app.data.repository.SettingsRepositoryImpl
|
||||
import de.bollwerk.app.data.repository.UpdateRepositoryImpl
|
||||
import de.bollwerk.app.domain.repository.CategoryRepository
|
||||
import de.bollwerk.app.domain.repository.ImportExportRepository
|
||||
import de.bollwerk.app.domain.repository.ItemRepository
|
||||
import de.bollwerk.app.domain.repository.LocationRepository
|
||||
import de.bollwerk.app.domain.repository.MessageRepository
|
||||
import de.bollwerk.app.domain.repository.SettingsRepository
|
||||
import de.bollwerk.app.domain.repository.UpdateRepository
|
||||
import de.bollwerk.app.domain.usecase.ApkInstaller
|
||||
import javax.inject.Singleton
|
||||
|
||||
@Module
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package de.krisenvorrat.app.di
|
||||
package de.bollwerk.app.di
|
||||
|
||||
import android.content.Context
|
||||
import dagger.Module
|
||||
|
|
@ -6,8 +6,8 @@ import dagger.Provides
|
|||
import dagger.hilt.InstallIn
|
||||
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||
import dagger.hilt.components.SingletonComponent
|
||||
import de.krisenvorrat.app.data.security.EncryptedPrefsTokenStorage
|
||||
import de.krisenvorrat.app.data.security.SecureTokenStorage
|
||||
import de.bollwerk.app.data.security.EncryptedPrefsTokenStorage
|
||||
import de.bollwerk.app.data.security.SecureTokenStorage
|
||||
import javax.inject.Singleton
|
||||
|
||||
@Module
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package de.krisenvorrat.app.domain.model
|
||||
package de.bollwerk.app.domain.model
|
||||
|
||||
import kotlinx.serialization.Serializable
|
||||
import kotlinx.serialization.json.Json
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package de.krisenvorrat.app.domain.model
|
||||
package de.bollwerk.app.domain.model
|
||||
|
||||
internal data class CategorySummary(
|
||||
val categoryId: Int,
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
package de.krisenvorrat.app.domain.model
|
||||
package de.bollwerk.app.domain.model
|
||||
|
||||
import de.krisenvorrat.app.data.db.entity.ItemEntity
|
||||
import de.bollwerk.app.data.db.entity.ItemEntity
|
||||
|
||||
internal enum class ExpiryUrgency {
|
||||
URGENT,
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package de.krisenvorrat.app.domain.model
|
||||
package de.bollwerk.app.domain.model
|
||||
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package de.krisenvorrat.app.domain.model
|
||||
package de.bollwerk.app.domain.model
|
||||
|
||||
/**
|
||||
* Type-safe Settings-Key-Definition.
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package de.krisenvorrat.app.domain.model
|
||||
package de.bollwerk.app.domain.model
|
||||
|
||||
/**
|
||||
* Kompatibilitätsschicht: leitet alle Konstanten an [SettingsKey] weiter.
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package de.krisenvorrat.app.domain.model
|
||||
package de.bollwerk.app.domain.model
|
||||
|
||||
internal sealed class SyncError(message: String, cause: Throwable? = null) : Exception(message, cause) {
|
||||
class ConnectionError(cause: Throwable? = null) :
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package de.krisenvorrat.app.domain.model
|
||||
package de.bollwerk.app.domain.model
|
||||
|
||||
internal sealed interface UpdateCheckResult {
|
||||
data class UpdateAvailable(val versionInfo: VersionInfo) : UpdateCheckResult
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package de.krisenvorrat.server.model
|
||||
package de.bollwerk.app.domain.model
|
||||
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
package de.krisenvorrat.app.domain.repository
|
||||
package de.bollwerk.app.domain.repository
|
||||
|
||||
import de.krisenvorrat.app.data.db.entity.CategoryEntity
|
||||
import de.bollwerk.app.data.db.entity.CategoryEntity
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
||||
internal interface CategoryRepository {
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
package de.krisenvorrat.app.domain.repository
|
||||
package de.bollwerk.app.domain.repository
|
||||
|
||||
import de.krisenvorrat.shared.model.InventoryDto
|
||||
import de.bollwerk.shared.model.InventoryDto
|
||||
import java.io.File
|
||||
|
||||
internal interface ImportExportRepository {
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
package de.krisenvorrat.app.domain.repository
|
||||
package de.bollwerk.app.domain.repository
|
||||
|
||||
import de.krisenvorrat.app.data.db.entity.ItemEntity
|
||||
import de.bollwerk.app.data.db.entity.ItemEntity
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
||||
internal interface ItemRepository {
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
package de.krisenvorrat.app.domain.repository
|
||||
package de.bollwerk.app.domain.repository
|
||||
|
||||
import de.krisenvorrat.app.data.db.entity.LocationEntity
|
||||
import de.bollwerk.app.data.db.entity.LocationEntity
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
||||
internal interface LocationRepository {
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
package de.krisenvorrat.app.domain.repository
|
||||
package de.bollwerk.app.domain.repository
|
||||
|
||||
import de.krisenvorrat.app.data.db.entity.MessageEntity
|
||||
import de.krisenvorrat.shared.model.UserListItemDto
|
||||
import de.bollwerk.app.data.db.entity.MessageEntity
|
||||
import de.bollwerk.shared.model.UserListItemDto
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
||||
internal interface MessageRepository {
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
package de.krisenvorrat.app.domain.repository
|
||||
package de.bollwerk.app.domain.repository
|
||||
|
||||
import de.krisenvorrat.app.data.db.entity.SettingsEntity
|
||||
import de.krisenvorrat.app.domain.model.SettingsKey
|
||||
import de.bollwerk.app.data.db.entity.SettingsEntity
|
||||
import de.bollwerk.app.domain.model.SettingsKey
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
||||
internal interface SettingsRepository {
|
||||
|
|
@ -1,8 +1,8 @@
|
|||
package de.krisenvorrat.app.domain.repository
|
||||
package de.bollwerk.app.domain.repository
|
||||
|
||||
import de.krisenvorrat.shared.model.InventoryDto
|
||||
import de.krisenvorrat.shared.model.InventoryInfoDto
|
||||
import de.krisenvorrat.shared.model.ItemDto
|
||||
import de.bollwerk.shared.model.InventoryDto
|
||||
import de.bollwerk.shared.model.InventoryInfoDto
|
||||
import de.bollwerk.shared.model.ItemDto
|
||||
|
||||
internal interface SyncService {
|
||||
suspend fun downloadInventory(since: Long? = null): Result<InventoryDto>
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
package de.krisenvorrat.app.domain.repository
|
||||
package de.bollwerk.app.domain.repository
|
||||
|
||||
import de.krisenvorrat.app.domain.model.VersionInfo
|
||||
import de.bollwerk.app.domain.model.VersionInfo
|
||||
import java.io.File
|
||||
|
||||
internal interface UpdateRepository {
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package de.krisenvorrat.app.domain.usecase
|
||||
package de.bollwerk.app.domain.usecase
|
||||
|
||||
import java.io.File
|
||||
|
||||
|
|
@ -1,8 +1,8 @@
|
|||
package de.krisenvorrat.app.domain.usecase
|
||||
package de.bollwerk.app.domain.usecase
|
||||
|
||||
import de.krisenvorrat.app.data.db.entity.CategoryEntity
|
||||
import de.krisenvorrat.app.data.db.entity.ItemEntity
|
||||
import de.krisenvorrat.app.domain.model.CategorySummary
|
||||
import de.bollwerk.app.data.db.entity.CategoryEntity
|
||||
import de.bollwerk.app.data.db.entity.ItemEntity
|
||||
import de.bollwerk.app.domain.model.CategorySummary
|
||||
import javax.inject.Inject
|
||||
|
||||
internal class CalculateCategorySummaryUseCase @Inject constructor() {
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
package de.krisenvorrat.app.domain.usecase
|
||||
package de.bollwerk.app.domain.usecase
|
||||
|
||||
import de.krisenvorrat.app.data.db.entity.ItemEntity
|
||||
import de.bollwerk.app.data.db.entity.ItemEntity
|
||||
import javax.inject.Inject
|
||||
|
||||
internal class CalculateSupplyRangeUseCase @Inject constructor() {
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
package de.krisenvorrat.app.domain.usecase
|
||||
package de.bollwerk.app.domain.usecase
|
||||
|
||||
import de.krisenvorrat.app.data.db.entity.ItemEntity
|
||||
import de.bollwerk.app.data.db.entity.ItemEntity
|
||||
import javax.inject.Inject
|
||||
|
||||
internal class CalculateTotalValueUseCase @Inject constructor() {
|
||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue