131 lines
3.5 KiB
Swift
131 lines
3.5 KiB
Swift
//
|
|
// PushSubscriptionAlerts+CoreDataClass.swift
|
|
// CoreDataStack
|
|
//
|
|
// Created by ihugo on 2021/4/9.
|
|
//
|
|
//
|
|
|
|
import Foundation
|
|
import CoreData
|
|
|
|
public final class SubscriptionAlerts: NSManagedObject {
|
|
@NSManaged public var follow: NSNumber?
|
|
@NSManaged public var favourite: NSNumber?
|
|
@NSManaged public var reblog: NSNumber?
|
|
@NSManaged public var mention: NSNumber?
|
|
@NSManaged public var poll: NSNumber?
|
|
|
|
@NSManaged public private(set) var createdAt: Date
|
|
@NSManaged public private(set) var updatedAt: Date
|
|
|
|
// MARK: - relationships
|
|
@NSManaged public var subscription: Subscription?
|
|
}
|
|
|
|
public extension SubscriptionAlerts {
|
|
override func awakeFromInsert() {
|
|
super.awakeFromInsert()
|
|
setPrimitiveValue(Date(), forKey: #keyPath(SubscriptionAlerts.createdAt))
|
|
}
|
|
|
|
func didUpdate(at networkDate: Date) {
|
|
self.updatedAt = networkDate
|
|
}
|
|
|
|
@discardableResult
|
|
static func insert(
|
|
into context: NSManagedObjectContext,
|
|
property: Property
|
|
) -> SubscriptionAlerts {
|
|
let alerts: SubscriptionAlerts = context.insertObject()
|
|
alerts.favourite = property.favourite
|
|
alerts.follow = property.follow
|
|
alerts.mention = property.mention
|
|
alerts.poll = property.poll
|
|
alerts.reblog = property.reblog
|
|
return alerts
|
|
}
|
|
|
|
func update(favourite: NSNumber?) {
|
|
guard self.favourite != favourite else { return }
|
|
self.favourite = favourite
|
|
|
|
didUpdate(at: Date())
|
|
}
|
|
|
|
func update(follow: NSNumber?) {
|
|
guard self.follow != follow else { return }
|
|
self.follow = follow
|
|
|
|
didUpdate(at: Date())
|
|
}
|
|
|
|
func update(mention: NSNumber?) {
|
|
guard self.mention != mention else { return }
|
|
self.mention = mention
|
|
|
|
didUpdate(at: Date())
|
|
}
|
|
|
|
func update(poll: NSNumber?) {
|
|
guard self.poll != poll else { return }
|
|
self.poll = poll
|
|
|
|
didUpdate(at: Date())
|
|
}
|
|
|
|
func update(reblog: NSNumber?) {
|
|
guard self.reblog != reblog else { return }
|
|
self.reblog = reblog
|
|
|
|
didUpdate(at: Date())
|
|
}
|
|
}
|
|
|
|
public extension SubscriptionAlerts {
|
|
struct Property {
|
|
public let favourite: NSNumber?
|
|
public let follow: NSNumber?
|
|
public let mention: NSNumber?
|
|
public let poll: NSNumber?
|
|
public let reblog: NSNumber?
|
|
|
|
public init(favourite: NSNumber?, follow: NSNumber?, mention: NSNumber?, poll: NSNumber?, reblog: NSNumber?) {
|
|
self.favourite = favourite
|
|
self.follow = follow
|
|
self.mention = mention
|
|
self.poll = poll
|
|
self.reblog = reblog
|
|
}
|
|
}
|
|
|
|
func updateIfNeed(property: Property) {
|
|
if self.follow != property.follow {
|
|
self.follow = property.follow
|
|
}
|
|
|
|
if self.favourite != property.favourite {
|
|
self.favourite = property.favourite
|
|
}
|
|
|
|
if self.reblog != property.reblog {
|
|
self.reblog = property.reblog
|
|
}
|
|
|
|
if self.mention != property.mention {
|
|
self.mention = property.mention
|
|
}
|
|
|
|
if self.poll != property.poll {
|
|
self.poll = property.poll
|
|
}
|
|
}
|
|
}
|
|
|
|
extension SubscriptionAlerts: Managed {
|
|
public static var defaultSortDescriptors: [NSSortDescriptor] {
|
|
return [NSSortDescriptor(keyPath: \SubscriptionAlerts.createdAt, ascending: false)]
|
|
}
|
|
}
|