Gassi: Tabs Treffen + Stamm-Gassis wie in der PWA

In der PWA ist die Seite 'Gassi-Treffen' mit drei Tabs:
- Treffen (walks.py — sich verabreden)
- Challenge (Monatsfoto)
- Stamm-Gassis (gassi_zeiten.py — regelmäßige Runden)

Mein bisheriger Mehr-Eintrag hieß 'Stamm-Gassi-Zeiten' und zeigte nur die
Stamm-Gassi-Funktion isoliert — das stimmte nicht mit der PWA überein.

Neu:
- GassiView mit Segmented Picker (Treffen / Stamm-Gassis)
- GassiTreffenList: GET /api/walks?lat&lon&radius=20000, Liste mit Datum,
  Uhrzeit, Ort, Teilnehmer-Zahl
- GassiTreffenDetail: Karte mit Pin, Stats, Beitreten/Verlassen
  (POST/DELETE /api/walks/{id}/join), Owner-Check
- AddWalkSheet: Titel, Datum, Uhrzeit, Treffpunkt-Name, Max-Teilnehmer,
  Beschreibung — POST /api/walks
- StammGassisList = bisherige GassiZeitenView umbenannt + Nav-Title raus
  (wird vom GassiView vergeben)

Im Mehr-Tab heißt der Link jetzt 'Gassi-Treffen' (pawprint-Icon) statt
'Stamm-Gassi-Zeiten' (alarm-Icon).

DTOs: WalkMeeting, WalkCreateBody, WalkJoinBody.
This commit is contained in:
rene 2026-05-30 14:02:42 +02:00
parent 5c4754caff
commit b49883ca79
9 changed files with 684 additions and 5 deletions

View file

@ -1,7 +1,7 @@
import SwiftUI
import UserNotifications
struct GassiZeitenView: View {
struct StammGassisList: View {
@State private var items: [GassiZeit] = []
@State private var isLoading = false
@State private var errorMessage: String?
@ -15,8 +15,6 @@ struct GassiZeitenView: View {
var body: some View {
content
.navigationTitle("Stamm-Gassi-Zeiten")
.navigationBarTitleDisplayMode(.inline)
.toolbar {
ToolbarItem(placement: .topBarTrailing) {
Button { showAdd = true } label: { Image(systemName: "plus") }