Ban Yaro Go — Phase 1 Foundation
SwiftUI/SwiftData iOS-Client, redet mit https://banyaro.app FastAPI-Backend. Bundle-ID app.banyaro.ios, Xcode-26-Projekt mit synchronisierten Ordnern. Drin: - APIClient (URLSession + Bearer + convertFromSnakeCase Decoder) - KeychainStore + AuthSession (@Observable) für persistenten Login - LoginView, MainTabView, SettingsView (mit Logout) - RoutesListView + RouteDetailView mit MapKit-Polyline aus preview_track - DogsListView mit Foto-Avatar - App-Icon (Pfote auf Banyaro-Amber)
This commit is contained in:
commit
81681130e6
20 changed files with 1129 additions and 0 deletions
60
BanYaroGo/API/DTOs.swift
Normal file
60
BanYaroGo/API/DTOs.swift
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
import Foundation
|
||||
|
||||
// MARK: - Auth
|
||||
|
||||
struct LoginRequest: Encodable {
|
||||
let email: String
|
||||
let password: String
|
||||
}
|
||||
|
||||
struct LoginResponse: Decodable {
|
||||
let token: String
|
||||
let name: String
|
||||
let isPremium: Bool
|
||||
}
|
||||
|
||||
// MARK: - Dogs
|
||||
|
||||
struct Dog: Decodable, Identifiable {
|
||||
let id: Int
|
||||
let name: String
|
||||
let rasse: String?
|
||||
let fotoUrl: String?
|
||||
let geburtstag: String?
|
||||
}
|
||||
|
||||
// MARK: - Routes
|
||||
|
||||
struct GPSPoint: Codable, Hashable {
|
||||
let lat: Double
|
||||
let lon: Double
|
||||
let alt: Double?
|
||||
}
|
||||
|
||||
struct RouteListItem: Decodable, Identifiable {
|
||||
let id: Int
|
||||
let userId: Int
|
||||
let name: String
|
||||
let beschreibung: String?
|
||||
let distanzKm: Double?
|
||||
let dauerMin: Int?
|
||||
let createdAt: String?
|
||||
let previewTrack: [GPSPoint]
|
||||
let fotoUrls: [String]?
|
||||
let userName: String?
|
||||
let isPublic: Bool?
|
||||
}
|
||||
|
||||
struct RouteDetail: Decodable, Identifiable {
|
||||
let id: Int
|
||||
let userId: Int
|
||||
let name: String
|
||||
let beschreibung: String?
|
||||
let distanzKm: Double?
|
||||
let dauerMin: Int?
|
||||
let gpsTrack: [GPSPoint]
|
||||
let fotoUrls: [String]?
|
||||
let createdAt: String?
|
||||
let userName: String?
|
||||
let dogIds: [Int]?
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue