From ccd26c144fec01697b64457abefd1c0744330ab5 Mon Sep 17 00:00:00 2001 From: CMK Date: Thu, 22 Jul 2021 12:56:20 +0800 Subject: [PATCH] chore: add index meta and missing reverse relationship for SearchHistory --- .../CoreData.xcdatamodel/contents | 9 ++++--- CoreDataStack/Entity/MastodonUser.swift | 1 + CoreDataStack/Entity/SearchHistory.swift | 27 +++++++++++++++++-- .../xcschemes/xcschememanagement.plist | 6 ++--- .../SearchHistoryViewModel.swift | 7 +++-- .../SearchResult/SearchResultViewModel.swift | 5 ++-- 6 files changed, 43 insertions(+), 12 deletions(-) diff --git a/CoreDataStack/CoreData.xcdatamodeld/CoreData.xcdatamodel/contents b/CoreDataStack/CoreData.xcdatamodeld/CoreData.xcdatamodel/contents index 5bc61b648..14c7dc2ec 100644 --- a/CoreDataStack/CoreData.xcdatamodeld/CoreData.xcdatamodel/contents +++ b/CoreDataStack/CoreData.xcdatamodeld/CoreData.xcdatamodel/contents @@ -85,7 +85,7 @@ - + @@ -132,6 +132,7 @@ + @@ -181,8 +182,10 @@ + + @@ -281,12 +284,12 @@ - + - + diff --git a/CoreDataStack/Entity/MastodonUser.swift b/CoreDataStack/Entity/MastodonUser.swift index 6b27b4cd8..b7a101152 100644 --- a/CoreDataStack/Entity/MastodonUser.swift +++ b/CoreDataStack/Entity/MastodonUser.swift @@ -47,6 +47,7 @@ final public class MastodonUser: NSManagedObject { // one-to-many relationship @NSManaged public private(set) var statuses: Set? + @NSManaged public private(set) var notifications: Set? // many-to-many relationship @NSManaged public private(set) var favourite: Set? diff --git a/CoreDataStack/Entity/SearchHistory.swift b/CoreDataStack/Entity/SearchHistory.swift index da6d98bc2..37191bbe5 100644 --- a/CoreDataStack/Entity/SearchHistory.swift +++ b/CoreDataStack/Entity/SearchHistory.swift @@ -11,6 +11,8 @@ import CoreData public final class SearchHistory: NSManagedObject { public typealias ID = UUID @NSManaged public private(set) var identifier: ID + @NSManaged public private(set) var domain: String + @NSManaged public private(set) var userID: MastodonUser.ID @NSManaged public private(set) var createAt: Date @NSManaged public private(set) var updatedAt: Date @@ -37,9 +39,12 @@ extension SearchHistory { @discardableResult public static func insert( into context: NSManagedObjectContext, + property: Property, account: MastodonUser ) -> SearchHistory { let searchHistory: SearchHistory = context.insertObject() + searchHistory.domain = property.domain + searchHistory.userID = property.userID searchHistory.account = account return searchHistory } @@ -47,9 +52,12 @@ extension SearchHistory { @discardableResult public static func insert( into context: NSManagedObjectContext, + property: Property, hashtag: Tag ) -> SearchHistory { let searchHistory: SearchHistory = context.insertObject() + searchHistory.domain = property.domain + searchHistory.userID = property.userID searchHistory.hashtag = hashtag return searchHistory } @@ -57,20 +65,35 @@ extension SearchHistory { @discardableResult public static func insert( into context: NSManagedObjectContext, + property: Property, status: Status ) -> SearchHistory { let searchHistory: SearchHistory = context.insertObject() + searchHistory.domain = property.domain + searchHistory.userID = property.userID searchHistory.status = status return searchHistory } } -public extension SearchHistory { - func update(updatedAt: Date) { +extension SearchHistory { + public func update(updatedAt: Date) { setValue(updatedAt, forKey: #keyPath(SearchHistory.updatedAt)) } } +extension SearchHistory { + public struct Property { + public let domain: String + public let userID: MastodonUser.ID + + public init(domain: String, userID: MastodonUser.ID) { + self.domain = domain + self.userID = userID + } + } +} + extension SearchHistory: Managed { public static var defaultSortDescriptors: [NSSortDescriptor] { return [NSSortDescriptor(keyPath: \SearchHistory.updatedAt, ascending: false)] diff --git a/Mastodon.xcodeproj/xcuserdata/mainasuk.xcuserdatad/xcschemes/xcschememanagement.plist b/Mastodon.xcodeproj/xcuserdata/mainasuk.xcuserdatad/xcschemes/xcschememanagement.plist index 238c933d4..fd09596bc 100644 --- a/Mastodon.xcodeproj/xcuserdata/mainasuk.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/Mastodon.xcodeproj/xcuserdata/mainasuk.xcuserdatad/xcschemes/xcschememanagement.plist @@ -12,7 +12,7 @@ CoreDataStack.xcscheme_^#shared#^_ orderHint - 21 + 22 Mastodon - ASDK.xcscheme_^#shared#^_ @@ -37,12 +37,12 @@ NotificationService.xcscheme_^#shared#^_ orderHint - 22 + 23 ShareActionExtension.xcscheme_^#shared#^_ orderHint - 23 + 21 SuppressBuildableAutocreation diff --git a/Mastodon/Scene/Search/SearchDetail/SearchHistory/SearchHistoryViewModel.swift b/Mastodon/Scene/Search/SearchDetail/SearchHistory/SearchHistoryViewModel.swift index acfd995ff..d3d41e90a 100644 --- a/Mastodon/Scene/Search/SearchDetail/SearchHistory/SearchHistoryViewModel.swift +++ b/Mastodon/Scene/Search/SearchDetail/SearchHistory/SearchHistoryViewModel.swift @@ -81,6 +81,9 @@ extension SearchHistoryViewModel { extension SearchHistoryViewModel { func persistSearchHistory(for item: SearchHistoryItem) { + guard let box = context.authenticationService.activeMastodonAuthenticationBox.value else { return } + let property = SearchHistory.Property(domain: box.domain, userID: box.userID) + switch item { case .account(let objectID): let managedObjectContext = context.backgroundManagedObjectContext @@ -89,7 +92,7 @@ extension SearchHistoryViewModel { if let searchHistory = user.searchHistory { searchHistory.update(updatedAt: Date()) } else { - SearchHistory.insert(into: managedObjectContext, account: user) + SearchHistory.insert(into: managedObjectContext, property: property, account: user) } } .sink { result in @@ -104,7 +107,7 @@ extension SearchHistoryViewModel { if let searchHistory = hashtag.searchHistory { searchHistory.update(updatedAt: Date()) } else { - SearchHistory.insert(into: managedObjectContext, hashtag: hashtag) + SearchHistory.insert(into: managedObjectContext, property: property, hashtag: hashtag) } } .sink { result in diff --git a/Mastodon/Scene/Search/SearchDetail/SearchResult/SearchResultViewModel.swift b/Mastodon/Scene/Search/SearchDetail/SearchResult/SearchResultViewModel.swift index 0ace96226..181302a24 100644 --- a/Mastodon/Scene/Search/SearchDetail/SearchResult/SearchResultViewModel.swift +++ b/Mastodon/Scene/Search/SearchDetail/SearchResult/SearchResultViewModel.swift @@ -142,6 +142,7 @@ extension SearchResultViewModel { extension SearchResultViewModel { func persistSearchHistory(for item: SearchResultItem) { guard let box = context.authenticationService.activeMastodonAuthenticationBox.value else { return } + let property = SearchHistory.Property(domain: box.domain, userID: box.userID) let domain = box.domain switch item { @@ -160,7 +161,7 @@ extension SearchResultViewModel { if let searchHistory = user.searchHistory { searchHistory.update(updatedAt: Date()) } else { - SearchHistory.insert(into: managedObjectContext, account: user) + SearchHistory.insert(into: managedObjectContext, property: property, account: user) } } .sink { result in @@ -178,7 +179,7 @@ extension SearchResultViewModel { if let searchHistory = hashtag.searchHistory { searchHistory.update(updatedAt: Date()) } else { - SearchHistory.insert(into: managedObjectContext, hashtag: hashtag) + SearchHistory.insert(into: managedObjectContext, property: property, hashtag: hashtag) } } .sink { result in