import Foundation import SwiftUI @MainActor class DataService: ObservableObject { @Published var partners: [Partner] = [] @Published var depots: [Depot] = [] @Published var datapoints: [Depotstand] = [] @Published var sortedDatapoints: [Depotstand] = [] @Published var depot: Depot = Depot(id: 0, name: "", type: "") let prefixURL: String = "https://REST-API-LINK" let dateFormatter: DateFormatter = { let formatter = DateFormatter() formatter.dateFormat = "yyyy-MM-dd" return formatter }() //MARK: - Diverse Daten-Funktionen func sortDatapoints(_ depot: Depot) /*-> [Depotstand]*/ { var sortedDatapoints: [Depotstand] = [] if let datapoints = depot.datapoints { sortedDatapoints = datapoints.sorted{ $0.date.compare($1.date) == .orderedDescending } sortedDatapoints = sortedDatapoints.sorted{ $0.id > $1.id } } self.sortedDatapoints = sortedDatapoints //return sortedDatapoints } //MARK: - REST-API Funktionen func createDepotStand(parameters: [String: Any]) async { let encoded = try! JSONSerialization.data(withJSONObject: parameters) var request = URLRequest(url: URL(string: prefixURL + "REST-API-LINK")!); request.httpMethod = "POST"; request.setValue("application/json", forHTTPHeaderField: "Content-Type") do { let (_, _) = try await URLSession.shared.upload(for: request, from: encoded) } catch let JsonError { print("createDepotstand failed:", JsonError) } } func readDepotstandAll() async throws { let decoder = JSONDecoder() decoder.dateDecodingStrategy = .formatted(self.dateFormatter) let (data, _) = try await URLSession.shared.data(from: URL(string: prefixURL + "REST-API-LINK")!) do { self.datapoints = try decoder.decode([Depotstand].self, from: data) } catch let JsonError { print("fetch JSON error: ", JsonError.localizedDescription) print("Das Problem: ", JsonError) } } func readDepot(id: Int) async { let decoder = JSONDecoder() decoder.dateDecodingStrategy = .formatted(self.dateFormatter) do { let (data, _) = try await URLSession.shared.data(from: URL(string: prefixURL + "REST-API-LINK")!) self.depot = try decoder.decode(Depot.self, from: data) sortDatapoints(self.depot) } catch { print("readDepot failed") } } }