// // DomainBlock.swift // CoreDataStack // // Created by sxiaojian on 2021/4/29. // import CoreData import Foundation public final class DomainBlock: NSManagedObject { @NSManaged public private(set) var blockedDomain: String @NSManaged public private(set) var createAt: Date @NSManaged public private(set) var domain: String @NSManaged public private(set) var userID: String override public func awakeFromInsert() { super.awakeFromInsert() setPrimitiveValue(Date(), forKey: #keyPath(DomainBlock.createAt)) } } extension DomainBlock { @discardableResult public static func insert( into context: NSManagedObjectContext, blockedDomain: String, domain: String, userID: String ) -> DomainBlock { let domainBlock: DomainBlock = context.insertObject() domainBlock.domain = domain domainBlock.blockedDomain = blockedDomain domainBlock.userID = userID return domainBlock } } extension DomainBlock: Managed { public static var defaultSortDescriptors: [NSSortDescriptor] { [NSSortDescriptor(keyPath: \DomainBlock.createAt, ascending: false)] } } extension DomainBlock { static func predicate(domain: String) -> NSPredicate { NSPredicate(format: "%K == %@", #keyPath(DomainBlock.domain), domain) } static func predicate(userID: String) -> NSPredicate { NSPredicate(format: "%K == %@", #keyPath(DomainBlock.userID), userID) } static func predicate(blockedDomain: String) -> NSPredicate { NSPredicate(format: "%K == %@", #keyPath(DomainBlock.blockedDomain), blockedDomain) } public static func predicate(domain: String, userID: String) -> NSPredicate { NSCompoundPredicate(andPredicateWithSubpredicates: [ DomainBlock.predicate(domain: domain), DomainBlock.predicate(userID: userID) ]) } public static func predicate(domain: String, userID: String, blockedDomain: String) -> NSPredicate { NSCompoundPredicate(andPredicateWithSubpredicates: [ DomainBlock.predicate(domain: domain), DomainBlock.predicate(userID: userID), DomainBlock.predicate(blockedDomain: blockedDomain) ]) } }