create a InternalLinkedItem model

This commit is contained in:
Satindar Dhillon 2022-04-20 21:18:01 -07:00
parent 5df8219631
commit 8c3ad7bec9
2 changed files with 91 additions and 0 deletions

View file

@ -50,6 +50,7 @@ public extension DataService {
switch payload.data {
case let .saved(feedItem):
// TODO: update core data record
promise(.success(feedItem))
case let .error(errorCode: errorCode):
switch errorCode {

View file

@ -0,0 +1,90 @@
import CoreData
import Foundation
import Models
struct InternalLinkedItem {
let id: String
let title: String
let createdAt: Date
let savedAt: Date
var readingProgress: Double
var readingProgressAnchor: Int
let imageURLString: String?
let onDeviceImageURLString: String?
let documentDirectoryPath: String?
let pageURLString: String
let descriptionText: String?
let publisherURLString: String?
let author: String?
let publishDate: Date?
let slug: String
let isArchived: Bool
let contentReader: String?
var labels: [FeedItemLabelDep]
func asManagedObject(inContext context: NSManagedObjectContext) -> LinkedItem {
let linkedItem = LinkedItem(entity: LinkedItem.entity(), insertInto: context)
linkedItem.id = id
linkedItem.title = title
linkedItem.createdAt = createdAt
linkedItem.savedAt = savedAt
linkedItem.readingProgress = readingProgress
linkedItem.readingProgressAnchor = Int64(readingProgressAnchor)
linkedItem.imageURLString = imageURLString
linkedItem.onDeviceImageURLString = onDeviceImageURLString
linkedItem.pageURLString = pageURLString
linkedItem.descriptionText = descriptionText
linkedItem.publisherURLString = publisherURLString
linkedItem.author = author
linkedItem.publishDate = publishDate
linkedItem.slug = slug
linkedItem.isArchived = isArchived
linkedItem.contentReader = contentReader
// for label in item.labels {
// TODO: append labels
// }
return linkedItem
}
static func make(from item: LinkedItem) -> InternalLinkedItem {
InternalLinkedItem(
id: item.id ?? "",
title: item.title ?? "",
createdAt: item.createdAt ?? Date(),
savedAt: item.savedAt ?? Date(),
readingProgress: item.readingProgress,
readingProgressAnchor: Int(item.readingProgressAnchor),
imageURLString: item.imageURLString,
onDeviceImageURLString: item.onDeviceImageURLString,
documentDirectoryPath: nil,
pageURLString: item.pageURLString ?? "",
descriptionText: item.title,
publisherURLString: item.publisherURLString,
author: item.author,
publishDate: item.publishDate,
slug: item.slug ?? "",
isArchived: item.isArchived,
contentReader: item.contentReader,
labels: []
)
}
}
extension Sequence where Element == InternalLinkedItem {
func persist(context: NSManagedObjectContext) -> [LinkedItem]? {
let linkedItems = map { $0.asManagedObject(inContext: context) }
do {
try context.save()
print("LinkedItems saved succesfully")
return linkedItems
} catch {
context.rollback()
print("Failed to save LinkedItems: \(error.localizedDescription)")
return nil
}
}
}