Files
omnivore/apple/OmnivoreKit/Sources/Services/InternalModels/InternalNewsletterEmail.swift
Satindar Dhillon 461249db59 fix mac app
2022-04-27 11:29:58 -07:00

59 lines
1.7 KiB
Swift

import CoreData
import Foundation
import Models
struct InternalNewsletterEmail {
let emailId: String
let email: String
let confirmationCode: String?
func persist(context: NSManagedObjectContext) -> NSManagedObjectID? {
var objectID: NSManagedObjectID?
context.performAndWait {
let newsletterEmail = asManagedObject(inContext: context)
do {
try context.save()
logger.debug("NewsletterEmail saved succesfully")
objectID = newsletterEmail.objectID
} catch {
context.rollback()
logger.debug("Failed to save NewsletterEmail: \(error.localizedDescription)")
}
}
return objectID
}
func asManagedObject(inContext context: NSManagedObjectContext) -> NewsletterEmail {
let existingEmail = NewsletterEmail.lookup(byID: emailId, inContext: context)
let newsletterEmail = existingEmail ?? NewsletterEmail(entity: NewsletterEmail.entity(), insertInto: context)
newsletterEmail.emailId = emailId
newsletterEmail.email = email
newsletterEmail.confirmationCode = confirmationCode
return newsletterEmail
}
}
extension Sequence where Element == InternalNewsletterEmail {
func persist(context: NSManagedObjectContext) -> [NSManagedObjectID]? {
var result: [NSManagedObjectID]?
context.performAndWait {
let newsletterEmails = map { $0.asManagedObject(inContext: context) }
do {
try context.save()
logger.debug("NewsletterEmail saved succesfully")
result = newsletterEmails.map(\.objectID)
} catch {
context.rollback()
logger.debug("Failed to save NewsletterEmail: \(error.localizedDescription)")
}
}
return result
}
}