forked from zelo72/mastodon-ios
62 lines
1.6 KiB
Swift
62 lines
1.6 KiB
Swift
//
|
|
// Application.swift
|
|
// CoreDataStack
|
|
//
|
|
// Created by sxiaojian on 2021/2/3.
|
|
//
|
|
|
|
import CoreData
|
|
import Foundation
|
|
|
|
public final class Application: NSManagedObject {
|
|
public typealias ID = UUID
|
|
@NSManaged public private(set) var identifier: ID
|
|
@NSManaged public private(set) var createAt: Date
|
|
|
|
@NSManaged public private(set) var name: String
|
|
@NSManaged public private(set) var website: String?
|
|
@NSManaged public private(set) var vapidKey: String?
|
|
|
|
// one-to-one relationship
|
|
@NSManaged public private(set) var status: Status
|
|
}
|
|
|
|
public extension Application {
|
|
override func awakeFromInsert() {
|
|
super.awakeFromInsert()
|
|
setPrimitiveValue(UUID(), forKey: #keyPath(Application.identifier))
|
|
}
|
|
|
|
@discardableResult
|
|
static func insert(
|
|
into context: NSManagedObjectContext,
|
|
property: Property
|
|
) -> Application {
|
|
let app: Application = context.insertObject()
|
|
app.name = property.name
|
|
app.website = property.website
|
|
app.vapidKey = property.vapidKey
|
|
return app
|
|
}
|
|
}
|
|
|
|
public extension Application {
|
|
struct Property {
|
|
public let name: String
|
|
public let website: String?
|
|
public let vapidKey: String?
|
|
|
|
public init(name: String, website: String?, vapidKey: String?) {
|
|
self.name = name
|
|
self.website = website
|
|
self.vapidKey = vapidKey
|
|
}
|
|
}
|
|
}
|
|
|
|
extension Application: Managed {
|
|
public static var defaultSortDescriptors: [NSSortDescriptor] {
|
|
return [NSSortDescriptor(keyPath: \Application.createAt, ascending: false)]
|
|
}
|
|
}
|