From e0d63700bc70a56fd0467a3b6a532c3d260d374d Mon Sep 17 00:00:00 2001 From: Justin Mazzocchi <2831158+jzzocc@users.noreply.github.com> Date: Tue, 29 Sep 2020 17:42:12 -0700 Subject: [PATCH] Refactoring --- DB/Sources/DB/Content/AccountInfo.swift | 10 ++++-- DB/Sources/DB/Content/ContentDatabase.swift | 4 +-- DB/Sources/DB/Content/StatusInfo.swift | 34 +++++++------------ .../DB/Extensions/Account+Extensions.swift | 4 +-- .../DB/Extensions/Identity+Internal.swift | 16 ++++----- .../DB/Extensions/Status+ Extensions.swift | 4 +-- DB/Sources/DB/Identity/IdentityInfo.swift | 9 +++-- 7 files changed, 39 insertions(+), 42 deletions(-) diff --git a/DB/Sources/DB/Content/AccountInfo.swift b/DB/Sources/DB/Content/AccountInfo.swift index 4df5496..0304ba8 100644 --- a/DB/Sources/DB/Content/AccountInfo.swift +++ b/DB/Sources/DB/Content/AccountInfo.swift @@ -4,12 +4,16 @@ import Foundation import GRDB struct AccountInfo: Codable, Hashable, FetchableRecord { - let account: AccountRecord - let moved: AccountRecord? + let record: AccountRecord + let movedRecord: AccountRecord? } extension AccountInfo { + static func addingIncludes(_ request: T) -> T where T.RowDecoder == AccountRecord { + request.including(optional: AccountRecord.moved.forKey(CodingKeys.movedRecord)) + } + static func request(_ request: QueryInterfaceRequest) -> QueryInterfaceRequest { - request.including(optional: AccountRecord.moved.forKey(CodingKeys.moved)).asRequest(of: self) + addingIncludes(request).asRequest(of: self) } } diff --git a/DB/Sources/DB/Content/ContentDatabase.swift b/DB/Sources/DB/Content/ContentDatabase.swift index 84d248b..e20b60b 100644 --- a/DB/Sources/DB/Content/ContentDatabase.swift +++ b/DB/Sources/DB/Content/ContentDatabase.swift @@ -195,8 +195,8 @@ public extension ContentDatabase { return [[]] } - let ancestors = try parent.status.ancestors.fetchAll(db) - let descendants = try parent.status.descendants.fetchAll(db) + let ancestors = try parent.record.ancestors.fetchAll(db) + let descendants = try parent.record.descendants.fetchAll(db) return [ancestors, [parent], descendants] } diff --git a/DB/Sources/DB/Content/StatusInfo.swift b/DB/Sources/DB/Content/StatusInfo.swift index 6d0fd43..fdfebf2 100644 --- a/DB/Sources/DB/Content/StatusInfo.swift +++ b/DB/Sources/DB/Content/StatusInfo.swift @@ -4,31 +4,21 @@ import Foundation import GRDB struct StatusInfo: Codable, Hashable, FetchableRecord { - let account: AccountRecord - let accountMoved: AccountRecord? - let status: StatusRecord - let reblogAccount: AccountRecord? - let reblogAccountMoved: AccountRecord? - let reblog: StatusRecord? + let record: StatusRecord + let accountInfo: AccountInfo + let reblogAccountInfo: AccountInfo? + let reblogRecord: StatusRecord? } extension StatusInfo { + static func addingIncludes(_ request: T) -> T where T.RowDecoder == StatusRecord { + request.including(required: AccountInfo.addingIncludes(StatusRecord.account).forKey(CodingKeys.accountInfo)) + .including(optional: AccountInfo.addingIncludes(StatusRecord.reblogAccount) + .forKey(CodingKeys.reblogAccountInfo)) + .including(optional: StatusRecord.reblog.forKey(CodingKeys.reblogRecord)) + } + static func request(_ request: QueryInterfaceRequest) -> QueryInterfaceRequest { - request.including(required: StatusRecord.account.forKey(CodingKeys.account)) - .including(optional: StatusRecord.accountMoved.forKey(CodingKeys.accountMoved)) - .including(optional: StatusRecord.reblogAccount.forKey(CodingKeys.reblogAccount)) - .including(optional: StatusRecord.reblogAccountMoved.forKey(CodingKeys.reblogAccountMoved)) - .including(optional: StatusRecord.reblog.forKey(CodingKeys.reblog)) - .asRequest(of: self) - } - - var accountInfo: AccountInfo { - AccountInfo(account: account, moved: accountMoved) - } - - var reblogAccountInfo: AccountInfo? { - guard let reblogAccount = reblogAccount else { return nil } - - return AccountInfo(account: reblogAccount, moved: reblogAccountMoved) + addingIncludes(request).asRequest(of: self) } } diff --git a/DB/Sources/DB/Extensions/Account+Extensions.swift b/DB/Sources/DB/Extensions/Account+Extensions.swift index e6494ce..86b4c71 100644 --- a/DB/Sources/DB/Extensions/Account+Extensions.swift +++ b/DB/Sources/DB/Extensions/Account+Extensions.swift @@ -16,11 +16,11 @@ extension Account { convenience init(info: AccountInfo) { var moved: Account? - if let movedRecord = info.moved { + if let movedRecord = info.movedRecord { moved = Self(record: movedRecord, moved: nil) } - self.init(record: info.account, moved: moved) + self.init(record: info.record, moved: moved) } } diff --git a/DB/Sources/DB/Extensions/Identity+Internal.swift b/DB/Sources/DB/Extensions/Identity+Internal.swift index e79c8c6..98b78ca 100644 --- a/DB/Sources/DB/Extensions/Identity+Internal.swift +++ b/DB/Sources/DB/Extensions/Identity+Internal.swift @@ -6,16 +6,16 @@ import GRDB extension Identity { init(info: IdentityInfo) { self.init( - id: info.identity.id, - url: info.identity.url, - authenticated: info.identity.authenticated, - pending: info.identity.pending, - lastUsedAt: info.identity.lastUsedAt, - preferences: info.identity.preferences, + id: info.record.id, + url: info.record.url, + authenticated: info.record.authenticated, + pending: info.record.pending, + lastUsedAt: info.record.lastUsedAt, + preferences: info.record.preferences, instance: info.instance, account: info.account, - lastRegisteredDeviceToken: info.identity.lastRegisteredDeviceToken, - pushSubscriptionAlerts: info.identity.pushSubscriptionAlerts) + lastRegisteredDeviceToken: info.record.lastRegisteredDeviceToken, + pushSubscriptionAlerts: info.record.pushSubscriptionAlerts) } } diff --git a/DB/Sources/DB/Extensions/Status+ Extensions.swift b/DB/Sources/DB/Extensions/Status+ Extensions.swift index 4444e5d..7c44705 100644 --- a/DB/Sources/DB/Extensions/Status+ Extensions.swift +++ b/DB/Sources/DB/Extensions/Status+ Extensions.swift @@ -19,11 +19,11 @@ extension Status { convenience init(info: StatusInfo) { var reblog: Status? - if let reblogRecord = info.reblog, let reblogAccountInfo = info.reblogAccountInfo { + if let reblogRecord = info.reblogRecord, let reblogAccountInfo = info.reblogAccountInfo { reblog = Status(record: reblogRecord, account: Account(info: reblogAccountInfo), reblog: nil) } - self.init(record: info.status, + self.init(record: info.record, account: Account(info: info.accountInfo), reblog: reblog) } diff --git a/DB/Sources/DB/Identity/IdentityInfo.swift b/DB/Sources/DB/Identity/IdentityInfo.swift index b39f379..c5ca883 100644 --- a/DB/Sources/DB/Identity/IdentityInfo.swift +++ b/DB/Sources/DB/Identity/IdentityInfo.swift @@ -5,15 +5,18 @@ import GRDB import Mastodon struct IdentityInfo: Codable, Hashable, FetchableRecord { - let identity: IdentityRecord + let record: IdentityRecord let instance: Identity.Instance? let account: Identity.Account? } extension IdentityInfo { - static func request(_ request: QueryInterfaceRequest) -> QueryInterfaceRequest { + static func addingIncludes(_ request: T) -> T where T.RowDecoder == IdentityRecord { request.including(optional: IdentityRecord.instance.forKey(CodingKeys.instance)) .including(optional: IdentityRecord.account.forKey(CodingKeys.account)) - .asRequest(of: self) + } + + static func request(_ request: QueryInterfaceRequest) -> QueryInterfaceRequest { + addingIncludes(request).asRequest(of: self) } }