chore: Grobplanung abgeschlossen, Planungs-Tickets #2-#11 angelegt
This commit is contained in:
parent
fbac5fbcaf
commit
cf05c54a42
2 changed files with 27 additions and 25 deletions
12
.github/skills/gh-tickets/next-ticket.ps1
vendored
12
.github/skills/gh-tickets/next-ticket.ps1
vendored
|
|
@ -13,7 +13,7 @@ $repo = "jreinemann-euris/krisenvorrat"
|
||||||
|
|
||||||
if ($IssueNumber -gt 0) {
|
if ($IssueNumber -gt 0) {
|
||||||
# Variante A: Explizite Issue-Nummer
|
# Variante A: Explizite Issue-Nummer
|
||||||
$json = gh issue view $IssueNumber --repo $repo --json number,title,labels | ConvertFrom-Json
|
$json = gh issue view $IssueNumber --repo $repo --json number, title, labels | ConvertFrom-Json
|
||||||
$labels = $json.labels | ForEach-Object { $_.name }
|
$labels = $json.labels | ForEach-Object { $_.name }
|
||||||
$type = if ($labels -contains "block-planning") { "[B]" }
|
$type = if ($labels -contains "block-planning") { "[B]" }
|
||||||
elseif ($labels -contains "migration") { "[M]" }
|
elseif ($labels -contains "migration") { "[M]" }
|
||||||
|
|
@ -27,9 +27,13 @@ if ($IssueNumber -gt 0) {
|
||||||
Write-Host "#$($json.number) $type $($json.title)"
|
Write-Host "#$($json.number) $type $($json.title)"
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
# Variante B: Nächstes Ticket per Board-Query (serverseitig auf Todo gefiltert)
|
# Variante B: Nächstes Ticket per Board-Query (client-seitig auf Todo gefiltert)
|
||||||
$raw = gh project item-list 2 --owner jreinemann-euris --format json --query "status:Todo" | ConvertFrom-Json
|
$raw = gh project item-list 2 --owner jreinemann-euris --format json | ConvertFrom-Json
|
||||||
$todos = $raw.items | ForEach-Object {
|
if ($null -eq $raw -or $null -eq $raw.items) {
|
||||||
|
Write-Host "Keine offenen Tickets gefunden."
|
||||||
|
return
|
||||||
|
}
|
||||||
|
$todos = $raw.items | Where-Object { $_.status -eq "Todo" } | ForEach-Object {
|
||||||
$labels = $_.labels
|
$labels = $_.labels
|
||||||
$prio = if ($labels -contains "priority:high") { 0 }
|
$prio = if ($labels -contains "priority:high") { 0 }
|
||||||
elseif ($labels -contains "priority:low") { 2 }
|
elseif ($labels -contains "priority:low") { 2 }
|
||||||
|
|
|
||||||
|
|
@ -14,17 +14,17 @@ Eine native Android-App zur Verwaltung eines Krisenvorrats-Inventars. Die App sp
|
||||||
|
|
||||||
## 2. Technischer Stack
|
## 2. Technischer Stack
|
||||||
|
|
||||||
| Komponente | Technologie | Begründung |
|
| Komponente | Technologie | Begründung |
|
||||||
|---|---|---|
|
| ------------------- | ---------------------------- | ------------------------------------------ |
|
||||||
| Sprache | Kotlin | Moderne Android-Standardsprache |
|
| Sprache | Kotlin | Moderne Android-Standardsprache |
|
||||||
| UI | Jetpack Compose | Deklarativ, aktuelles Android-UI-Framework |
|
| UI | Jetpack Compose | Deklarativ, aktuelles Android-UI-Framework |
|
||||||
| Architektur | MVVM + Clean Architecture | Testbar, wartbar, klar getrennt |
|
| Architektur | MVVM + Clean Architecture | Testbar, wartbar, klar getrennt |
|
||||||
| Persistenz | Room (SQLite) | Robuste lokale DB mit Coroutines-Support |
|
| Persistenz | Room (SQLite) | Robuste lokale DB mit Coroutines-Support |
|
||||||
| DI | Hilt | Standard-DI für Android |
|
| DI | Hilt | Standard-DI für Android |
|
||||||
| Async | Kotlin Coroutines + Flow | Reaktive Datenströme |
|
| Async | Kotlin Coroutines + Flow | Reaktive Datenströme |
|
||||||
| Datenexport/-import | JSON (kotlinx.serialization) | Strukturiert, KI-lesbar, portabel |
|
| Datenexport/-import | JSON (kotlinx.serialization) | Strukturiert, KI-lesbar, portabel |
|
||||||
| Build | Gradle (Kotlin DSL) | Android-Standard |
|
| Build | Gradle (Kotlin DSL) | Android-Standard |
|
||||||
| Verteilung | APK-Sideloading | Kein Store nötig, privater Gebrauch |
|
| Verteilung | APK-Sideloading | Kein Store nötig, privater Gebrauch |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -56,13 +56,7 @@ Eine native Android-App zur Verwaltung eines Krisenvorrats-Inventars. Die App sp
|
||||||
"Kleidung",
|
"Kleidung",
|
||||||
"Sonstiges"
|
"Sonstiges"
|
||||||
],
|
],
|
||||||
"locations": [
|
"locations": ["Keller", "Küche", "Garage", "Schlafzimmer", "Sonstiges"],
|
||||||
"Keller",
|
|
||||||
"Küche",
|
|
||||||
"Garage",
|
|
||||||
"Schlafzimmer",
|
|
||||||
"Sonstiges"
|
|
||||||
],
|
|
||||||
"items": [
|
"items": [
|
||||||
{
|
{
|
||||||
"id": "uuid",
|
"id": "uuid",
|
||||||
|
|
@ -70,8 +64,8 @@ Eine native Android-App zur Verwaltung eines Krisenvorrats-Inventars. Die App sp
|
||||||
"category": "Grundnahrungsmittel",
|
"category": "Grundnahrungsmittel",
|
||||||
"quantity": 200,
|
"quantity": 200,
|
||||||
"unit": "kg",
|
"unit": "kg",
|
||||||
"unitPrice": 0.80,
|
"unitPrice": 0.8,
|
||||||
"totalPrice": 160.00,
|
"totalPrice": 160.0,
|
||||||
"kcalPer100g": 340,
|
"kcalPer100g": 340,
|
||||||
"expiryDate": "2028-01-01",
|
"expiryDate": "2028-01-01",
|
||||||
"location": "Keller",
|
"location": "Keller",
|
||||||
|
|
@ -88,12 +82,14 @@ Eine native Android-App zur Verwaltung eines Krisenvorrats-Inventars. Die App sp
|
||||||
## 5. Funktionsumfang – Version 1.0
|
## 5. Funktionsumfang – Version 1.0
|
||||||
|
|
||||||
### 5.1 Inventarverwaltung
|
### 5.1 Inventarverwaltung
|
||||||
|
|
||||||
- [ ] Artikel anlegen (Name, Kategorie, Menge, Einheit, Preis, Lagerort, Ablaufdatum, Mindestbestand)
|
- [ ] Artikel anlegen (Name, Kategorie, Menge, Einheit, Preis, Lagerort, Ablaufdatum, Mindestbestand)
|
||||||
- [ ] Artikel bearbeiten
|
- [ ] Artikel bearbeiten
|
||||||
- [ ] Artikel löschen
|
- [ ] Artikel löschen
|
||||||
- [ ] Kategorien und Lagerorte verwalten
|
- [ ] Kategorien und Lagerorte verwalten
|
||||||
|
|
||||||
### 5.2 Übersichten & Analyse
|
### 5.2 Übersichten & Analyse
|
||||||
|
|
||||||
- [ ] Gesamtübersicht nach Kategorie
|
- [ ] Gesamtübersicht nach Kategorie
|
||||||
- [ ] **Reichweitenrechner:** Automatische Berechnung wie lange Vorrat reicht (basierend auf Personenzahl + kcal/Tag)
|
- [ ] **Reichweitenrechner:** Automatische Berechnung wie lange Vorrat reicht (basierend auf Personenzahl + kcal/Tag)
|
||||||
- [ ] **Ablaufdaten-Warnung:** Was läuft in 6 / 12 Monaten ab?
|
- [ ] **Ablaufdaten-Warnung:** Was läuft in 6 / 12 Monaten ab?
|
||||||
|
|
@ -101,12 +97,14 @@ Eine native Android-App zur Verwaltung eines Krisenvorrats-Inventars. Die App sp
|
||||||
- [ ] Gesamtwert des Vorrats
|
- [ ] Gesamtwert des Vorrats
|
||||||
|
|
||||||
### 5.3 Datenhaltung
|
### 5.3 Datenhaltung
|
||||||
|
|
||||||
- [ ] **Room (SQLite) ist die einzige Datenquelle zur Laufzeit**
|
- [ ] **Room (SQLite) ist die einzige Datenquelle zur Laufzeit**
|
||||||
- [ ] Beim ersten Start: leere Datenbank, User erfasst Daten
|
- [ ] Beim ersten Start: leere Datenbank, User erfasst Daten
|
||||||
- [ ] Alle Änderungen werden direkt in Room persistiert
|
- [ ] Alle Änderungen werden direkt in Room persistiert
|
||||||
- [ ] Reactive UI via Coroutines + Flow aus Room
|
- [ ] Reactive UI via Coroutines + Flow aus Room
|
||||||
|
|
||||||
### 5.4 Import / Export (JSON)
|
### 5.4 Import / Export (JSON)
|
||||||
|
|
||||||
- [ ] **JSON-Export:** Gesamtes Inventar als JSON-Datei exportieren (via Share Intent / Datei speichern)
|
- [ ] **JSON-Export:** Gesamtes Inventar als JSON-Datei exportieren (via Share Intent / Datei speichern)
|
||||||
- [ ] **JSON-Import:** Inventar aus JSON-Datei laden (Restore / Datenübernahme), ersetzt oder merged bestehende Daten
|
- [ ] **JSON-Import:** Inventar aus JSON-Datei laden (Restore / Datenübernahme), ersetzt oder merged bestehende Daten
|
||||||
- [ ] **Markdown-Export:** Inventar als Markdown-Text (Copy / Share für KI-Eingabe)
|
- [ ] **Markdown-Export:** Inventar als Markdown-Text (Copy / Share für KI-Eingabe)
|
||||||
|
|
@ -162,4 +160,4 @@ Eine native Android-App zur Verwaltung eines Krisenvorrats-Inventars. Die App sp
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
*Aktualisiert: 2026-05-13 – Umstellung auf native Android-App*
|
_Aktualisiert: 2026-05-13 – Umstellung auf native Android-App_
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue