Files
omnivore/apple/OmnivoreKit/Sources/Services/DataService/Mutations/UpdateNewsletterEmailMutation.swift
Jackson Harper 40b6ab26f4 Add missing files
2023-12-22 11:43:23 +08:00

54 lines
1.7 KiB
Swift

import CoreData
import Foundation
import Models
import SwiftGraphQL
public extension DataService {
func updateNewsletterEmail(
emailID: String, folder: String? = nil, description: String? = nil
) async throws -> InternalNewsletterEmail {
enum MutationResult {
case result(email: InternalNewsletterEmail)
case error(errorMessage: String)
}
let selection = Selection<MutationResult, Unions.UpdateNewsletterEmailResult> {
try $0.on(
updateNewsletterEmailError: .init { .error(errorMessage: try $0.errorCodes().first?.rawValue ?? "Unknown Error") },
updateNewsletterEmailSuccess: .init { .result(email: try $0.newsletterEmail(selection: newsletterEmailSelection)) }
)
}
let mutation = Selection.Mutation {
try $0.updateNewsletterEmail(
input: InputObjects.UpdateNewsletterEmailInput(
description: OptionalArgument(description),
folder: OptionalArgument(folder),
id: emailID
),
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(email: email):
continuation.resume(returning: email)
case let .error(errorMessage: errorMessage):
continuation.resume(throwing: BasicError.message(messageText: errorMessage))
}
}
}
}
}