2020-09-05 01:06:21 +00:00
|
|
|
// Copyright © 2020 Metabolist. All rights reserved.
|
|
|
|
|
|
|
|
import Foundation
|
|
|
|
import GRDB
|
|
|
|
import Mastodon
|
|
|
|
|
2020-09-05 02:05:15 +00:00
|
|
|
struct AccountRecord: Codable, Hashable {
|
2020-09-05 01:06:21 +00:00
|
|
|
let id: String
|
|
|
|
let username: String
|
|
|
|
let acct: String
|
|
|
|
let displayName: String
|
|
|
|
let locked: Bool
|
|
|
|
let createdAt: Date
|
|
|
|
let followersCount: Int
|
|
|
|
let followingCount: Int
|
|
|
|
let statusesCount: Int
|
|
|
|
let note: HTML
|
|
|
|
let url: URL
|
|
|
|
let avatar: URL
|
|
|
|
let avatarStatic: URL
|
|
|
|
let header: URL
|
|
|
|
let headerStatic: URL
|
|
|
|
let fields: [Account.Field]
|
|
|
|
let emojis: [Emoji]
|
|
|
|
let bot: Bool
|
|
|
|
let discoverable: Bool
|
|
|
|
let movedId: String?
|
|
|
|
}
|
|
|
|
|
2020-09-29 06:06:25 +00:00
|
|
|
extension AccountRecord {
|
|
|
|
enum Columns {
|
|
|
|
static let id = Column(AccountRecord.CodingKeys.id)
|
|
|
|
static let username = Column(AccountRecord.CodingKeys.username)
|
|
|
|
static let acct = Column(AccountRecord.CodingKeys.acct)
|
|
|
|
static let displayName = Column(AccountRecord.CodingKeys.displayName)
|
|
|
|
static let locked = Column(AccountRecord.CodingKeys.locked)
|
|
|
|
static let createdAt = Column(AccountRecord.CodingKeys.createdAt)
|
|
|
|
static let followersCount = Column(AccountRecord.CodingKeys.followersCount)
|
|
|
|
static let followingCount = Column(AccountRecord.CodingKeys.followingCount)
|
|
|
|
static let statusesCount = Column(AccountRecord.CodingKeys.statusesCount)
|
|
|
|
static let note = Column(AccountRecord.CodingKeys.note)
|
|
|
|
static let url = Column(AccountRecord.CodingKeys.url)
|
|
|
|
static let avatar = Column(AccountRecord.CodingKeys.avatar)
|
|
|
|
static let avatarStatic = Column(AccountRecord.CodingKeys.avatarStatic)
|
|
|
|
static let header = Column(AccountRecord.CodingKeys.header)
|
|
|
|
static let headerStatic = Column(AccountRecord.CodingKeys.headerStatic)
|
|
|
|
static let fields = Column(AccountRecord.CodingKeys.fields)
|
|
|
|
static let emojis = Column(AccountRecord.CodingKeys.emojis)
|
|
|
|
static let bot = Column(AccountRecord.CodingKeys.bot)
|
|
|
|
static let discoverable = Column(AccountRecord.CodingKeys.discoverable)
|
|
|
|
static let movedId = Column(AccountRecord.CodingKeys.movedId)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-09-05 02:05:15 +00:00
|
|
|
extension AccountRecord: FetchableRecord, PersistableRecord {
|
2020-09-05 01:06:21 +00:00
|
|
|
static func databaseJSONDecoder(for column: String) -> JSONDecoder {
|
|
|
|
MastodonDecoder()
|
|
|
|
}
|
|
|
|
|
|
|
|
static func databaseJSONEncoder(for column: String) -> JSONEncoder {
|
|
|
|
MastodonEncoder()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-09-05 02:05:15 +00:00
|
|
|
extension AccountRecord {
|
|
|
|
static let moved = belongsTo(AccountRecord.self, key: "moved")
|
2020-09-18 00:16:41 +00:00
|
|
|
static let pinnedStatusJoins = hasMany(
|
|
|
|
AccountPinnedStatusJoin.self,
|
2020-09-29 06:06:25 +00:00
|
|
|
using: ForeignKey([AccountPinnedStatusJoin.Columns.accountId]))
|
|
|
|
.order(AccountPinnedStatusJoin.Columns.index)
|
2020-09-18 00:16:41 +00:00
|
|
|
static let pinnedStatuses = hasMany(
|
|
|
|
StatusRecord.self,
|
|
|
|
through: pinnedStatusJoins,
|
|
|
|
using: AccountPinnedStatusJoin.status)
|
|
|
|
|
|
|
|
var pinnedStatuses: QueryInterfaceRequest<StatusResult> {
|
|
|
|
request(for: Self.pinnedStatuses).statusResultRequest
|
|
|
|
}
|
2020-09-05 01:06:21 +00:00
|
|
|
|
|
|
|
init(account: Account) {
|
|
|
|
id = account.id
|
|
|
|
username = account.username
|
|
|
|
acct = account.acct
|
|
|
|
displayName = account.displayName
|
|
|
|
locked = account.locked
|
|
|
|
createdAt = account.createdAt
|
|
|
|
followersCount = account.followersCount
|
|
|
|
followingCount = account.followingCount
|
|
|
|
statusesCount = account.statusesCount
|
|
|
|
note = account.note
|
|
|
|
url = account.url
|
|
|
|
avatar = account.avatar
|
|
|
|
avatarStatic = account.avatarStatic
|
|
|
|
header = account.header
|
|
|
|
headerStatic = account.headerStatic
|
|
|
|
fields = account.fields
|
|
|
|
emojis = account.emojis
|
|
|
|
bot = account.bot
|
|
|
|
discoverable = account.discoverable
|
|
|
|
movedId = account.moved?.id
|
|
|
|
}
|
|
|
|
}
|