create InternalLinkedItemLabel model

This commit is contained in:
Satindar Dhillon 2022-04-22 09:29:40 -07:00
parent 25e237255c
commit dada5c76c9
3 changed files with 67 additions and 8 deletions

View file

@ -161,9 +161,9 @@ public extension FeedItemDep {
linkedItem.isArchived = isArchived
linkedItem.contentReader = contentReader
// for label in item.labels {
// TODO: append labels...and highlights?
// }
// for label in labels {
// // TODO: fix
// }
return linkedItem
}

View file

@ -20,10 +20,11 @@ struct InternalLinkedItem {
let slug: String
let isArchived: Bool
let contentReader: String?
var labels: [FeedItemLabelDep]
var labels: [InternalLinkedItemLabel]
func asManagedObject(inContext context: NSManagedObjectContext) -> LinkedItem {
let linkedItem = LinkedItem(entity: LinkedItem.entity(), insertInto: context)
let existingItem = LinkedItem.lookup(byID: id, inContext: context)
let linkedItem = existingItem ?? LinkedItem(entity: LinkedItem.entity(), insertInto: context)
linkedItem.id = id
linkedItem.title = title
@ -42,9 +43,9 @@ struct InternalLinkedItem {
linkedItem.isArchived = isArchived
linkedItem.contentReader = contentReader
// for label in item.labels {
// TODO: append labels
// }
for label in labels {
linkedItem.addToLabels(label.asManagedObject(inContext: context))
}
return linkedItem
}

View file

@ -0,0 +1,58 @@
import CoreData
import Foundation
import Models
struct InternalLinkedItemLabel {
let id: String
let name: String
let color: String
let createdAt: Date?
let labelDescription: String?
func persist(context: NSManagedObjectContext) -> NSManagedObjectID? {
var objectID: NSManagedObjectID?
context.performAndWait {
let label = asManagedObject(inContext: context)
do {
try context.save()
logger.debug("NewsletterEmail saved succesfully")
objectID = label.objectID
} catch {
context.rollback()
logger.debug("Failed to save NewsletterEmail: \(error.localizedDescription)")
}
}
return objectID
}
func asManagedObject(inContext context: NSManagedObjectContext) -> LinkedItemLabel {
let existingItem = LinkedItemLabel.lookup(byID: id, inContext: context)
let label = existingItem ?? LinkedItemLabel(entity: LinkedItemLabel.entity(), insertInto: context)
label.id = id
label.name = name
label.color = color
label.createdAt = createdAt
label.labelDescription = labelDescription
return label
}
}
extension LinkedItemLabel {
static func lookup(byID labelID: String, inContext context: NSManagedObjectContext) -> LinkedItemLabel? {
let fetchRequest: NSFetchRequest<Models.LinkedItemLabel> = LinkedItemLabel.fetchRequest()
fetchRequest.predicate = NSPredicate(
format: "id == %@", labelID
)
var label: LinkedItemLabel?
context.performAndWait {
label = (try? context.fetch(fetchRequest))?.first
}
return label
}
}