72 lines
1.8 KiB
Swift
72 lines
1.8 KiB
Swift
//
|
|
// Mention.swift
|
|
// CoreDataStack
|
|
//
|
|
// Created by sxiaojian on 2021/2/1.
|
|
//
|
|
|
|
import CoreData
|
|
import Foundation
|
|
|
|
public final class Mention: NSManagedObject {
|
|
public typealias ID = UUID
|
|
|
|
@NSManaged public private(set) var index: NSNumber
|
|
|
|
@NSManaged public private(set) var identifier: ID
|
|
@NSManaged public private(set) var id: String
|
|
@NSManaged public private(set) var createAt: Date
|
|
|
|
@NSManaged public private(set) var username: String
|
|
@NSManaged public private(set) var acct: String
|
|
@NSManaged public private(set) var url: String
|
|
|
|
// many-to-one relationship
|
|
@NSManaged public private(set) var status: Status
|
|
}
|
|
|
|
public extension Mention {
|
|
override func awakeFromInsert() {
|
|
super.awakeFromInsert()
|
|
|
|
setPrimitiveValue(UUID(), forKey: #keyPath(Mention.identifier))
|
|
}
|
|
|
|
@discardableResult
|
|
static func insert(
|
|
into context: NSManagedObjectContext,
|
|
property: Property,
|
|
index: Int
|
|
) -> Mention {
|
|
let mention: Mention = context.insertObject()
|
|
mention.index = NSNumber(value: index)
|
|
mention.id = property.id
|
|
mention.username = property.username
|
|
mention.acct = property.acct
|
|
mention.url = property.url
|
|
return mention
|
|
}
|
|
}
|
|
|
|
public extension Mention {
|
|
struct Property {
|
|
public let id: String
|
|
public let username: String
|
|
public let acct: String
|
|
public let url: String
|
|
|
|
public init(id: String, username: String, acct: String, url: String) {
|
|
self.id = id
|
|
self.username = username
|
|
self.acct = acct
|
|
self.url = url
|
|
}
|
|
}
|
|
}
|
|
|
|
extension Mention: Managed {
|
|
public static var defaultSortDescriptors: [NSSortDescriptor] {
|
|
return [NSSortDescriptor(keyPath: \Mention.createAt, ascending: false)]
|
|
}
|
|
}
|