-
Notifications
You must be signed in to change notification settings - Fork 194
/
MessageSearchQueryDTO.swift
46 lines (36 loc) 路 1.55 KB
/
MessageSearchQueryDTO.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
//
// Copyright 漏 2021 Stream.io Inc. All rights reserved.
//
import CoreData
@objc(MessageSearchQueryDTO)
class MessageSearchQueryDTO: NSManagedObject {
/// Unique identifier of the query/
@NSManaged var filterHash: String?
@NSManaged var messages: Set<MessageDTO>
static func load(filterHash: String, context: NSManagedObjectContext) -> MessageSearchQueryDTO? {
let request = NSFetchRequest<MessageSearchQueryDTO>(entityName: MessageSearchQueryDTO.entityName)
request.predicate = NSPredicate(format: "filterHash == %@", filterHash)
return try? context.fetch(request).first
}
}
extension NSManagedObjectContext {
func messageSearchQuery(filterHash: String) -> MessageSearchQueryDTO? {
MessageSearchQueryDTO.load(filterHash: filterHash, context: self)
}
func saveQuery(query: MessageSearchQuery) -> MessageSearchQueryDTO {
if let existingDTO = MessageSearchQueryDTO.load(filterHash: query.filterHash, context: self) {
return existingDTO
}
let newDTO = NSEntityDescription
.insertNewObject(forEntityName: MessageSearchQueryDTO.entityName, into: self) as! MessageSearchQueryDTO
newDTO.filterHash = query.filterHash
return newDTO
}
func deleteQuery(_ query: MessageSearchQuery) {
guard let existingDTO = MessageSearchQueryDTO.load(filterHash: query.filterHash, context: self) else {
// This query doesn't exist in DB.
return
}
delete(existingDTO)
}
}