Kurdtvs-Live-Kurdish-TV-Kur.../CoreDataStack/Entity/Toot.swift

109 lines
2.8 KiB
Swift
Raw Normal View History

2021-01-27 07:50:13 +01:00
//
2021-01-28 09:10:30 +01:00
// Toot.swift
2021-01-27 07:50:13 +01:00
// CoreDataStack
//
// Created by MainasuK Cirno on 2021/1/27.
//
import Foundation
import CoreData
2021-01-28 09:10:30 +01:00
final public class Toot: NSManagedObject {
2021-01-27 07:50:13 +01:00
public typealias ID = String
@NSManaged public private(set) var identifier: ID
@NSManaged public private(set) var domain: String
@NSManaged public private(set) var id: String
@NSManaged public private(set) var content: String
@NSManaged public private(set) var createdAt: Date
@NSManaged public private(set) var updatedAt: Date
2021-01-28 09:10:30 +01:00
@NSManaged public private(set) var deletedAt: Date?
2021-01-27 07:50:13 +01:00
// many-to-one relationship
@NSManaged public private(set) var author: MastodonUser
// one-to-many relationship
@NSManaged public private(set) var homeTimelineIndexes: Set<HomeTimelineIndex>?
}
2021-01-28 09:10:30 +01:00
extension Toot {
2021-01-27 07:50:13 +01:00
@discardableResult
public static func insert(
into context: NSManagedObjectContext,
property: Property,
author: MastodonUser
2021-01-28 09:10:30 +01:00
) -> Toot {
let toots: Toot = context.insertObject()
2021-01-27 07:50:13 +01:00
toots.identifier = property.identifier
toots.domain = property.domain
toots.id = property.id
toots.content = property.content
toots.createdAt = property.createdAt
toots.updatedAt = property.networkDate
toots.author = author
return toots
}
}
2021-01-28 09:10:30 +01:00
extension Toot {
2021-01-27 07:50:13 +01:00
public struct Property {
public let identifier: String
public let domain: String
public let id: String
public let content: String
public let createdAt: Date
public let networkDate: Date
public init(
id: String,
domain: String,
content: String,
createdAt: Date,
networkDate: Date
) {
self.identifier = id + "@" + domain
self.domain = domain
self.id = id
self.content = content
self.createdAt = createdAt
self.networkDate = networkDate
}
}
}
2021-01-28 09:10:30 +01:00
extension Toot: Managed {
2021-01-27 07:50:13 +01:00
public static var defaultSortDescriptors: [NSSortDescriptor] {
2021-01-28 09:10:30 +01:00
return [NSSortDescriptor(keyPath: \Toot.createdAt, ascending: false)]
2021-01-27 07:50:13 +01:00
}
}
2021-01-28 09:10:30 +01:00
extension Toot {
public static func predicate(idStr: String) -> NSPredicate {
return NSPredicate(format: "%K == %@", #keyPath(Toot.id), idStr)
}
public static func predicate(idStrs: [String]) -> NSPredicate {
return NSPredicate(format: "%K IN %@", #keyPath(Toot.id), idStrs)
}
public static func notDeleted() -> NSPredicate {
return NSPredicate(format: "%K == nil", #keyPath(Toot.deletedAt))
}
public static func deleted() -> NSPredicate {
return NSPredicate(format: "%K != nil", #keyPath(Toot.deletedAt))
}
}