From 9b0eca7d9a38d555571a356ff44d0a327c50c782 Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Tue, 26 Mar 2024 14:58:52 +0800 Subject: [PATCH] Update bundle --- .../DataService/Mutations/DeleteRule.swift | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 apple/OmnivoreKit/Sources/Services/DataService/Mutations/DeleteRule.swift diff --git a/apple/OmnivoreKit/Sources/Services/DataService/Mutations/DeleteRule.swift b/apple/OmnivoreKit/Sources/Services/DataService/Mutations/DeleteRule.swift new file mode 100644 index 000000000..5f10db0c1 --- /dev/null +++ b/apple/OmnivoreKit/Sources/Services/DataService/Mutations/DeleteRule.swift @@ -0,0 +1,46 @@ +import CoreData +import Foundation +import Models +import SwiftGraphQL + +public extension DataService { + func deleteRule(ruleID: String) async throws -> Rule { + enum MutationResult { + case result(rule: Rule) + case error(errorMessage: String) + } + + let selection = Selection { + try $0.on( + deleteRuleError: .init { .error(errorMessage: try $0.errorCodes().first?.rawValue ?? "Unknown Error") }, + deleteRuleSuccess: .init { .result(rule: try $0.rule(selection: ruleSelection)) } + ) + } + + let mutation = Selection.Mutation { + try $0.deleteRule( + id: ruleID, + selection: selection + ) + } + + let path = appEnvironment.graphqlPath + let headers = networker.defaultHeaders + + return try await withCheckedThrowingContinuation { continuation in + send(mutation, to: path, headers: headers) { queryResult in + guard let payload = try? queryResult.get() else { + continuation.resume(throwing: BasicError.message(messageText: "network error")) + return + } + + switch payload.data { + case let .result(rule: rule): + continuation.resume(returning: rule) + case let .error(errorMessage: errorMessage): + continuation.resume(throwing: BasicError.message(messageText: errorMessage)) + } + } + } + } +}