NetNewsWire/Frameworks/Database/AuthorsTable.swift

67 lines
1.4 KiB
Swift
Raw Normal View History

2017-07-13 22:38:47 +02:00
//
// AuthorsTable.swift
2017-07-13 22:38:47 +02:00
// Database
//
// Created by Brent Simmons on 7/13/17.
// Copyright © 2017 Ranchero Software. All rights reserved.
//
import Foundation
2017-08-04 06:10:01 +02:00
import RSDatabase
2017-07-13 22:38:47 +02:00
import Data
2017-08-06 21:37:47 +02:00
// article->authors is a many-to-many relationship.
// Theres a lookup table relating authorID and articleID.
//
// CREATE TABLE if not EXISTS authors (authorID TEXT NOT NULL PRIMARY KEY, name TEXT, url TEXT, avatarURL TEXT, emailAddress TEXT);
2017-08-06 21:37:47 +02:00
// CREATE TABLE if not EXISTS authorLookup (authorID TEXT NOT NULL, articleID TEXT NOT NULL, PRIMARY KEY(authorID, articleID));
2017-08-21 00:56:58 +02:00
struct AuthorsTable: DatabaseTable {
let name: String
let databaseIDKey = DatabaseKey.authorID
private let cache = DatabaseObjectCache()
2017-08-21 00:56:58 +02:00
init(name: String) {
self.name = name
}
2017-08-21 00:56:58 +02:00
// MARK: DatabaseTable Methods
func objectWithRow(_ row: FMResultSet) -> DatabaseObject? {
if let author = authorWithRow(row) {
return author as DatabaseObject
}
return nil
2017-08-21 00:56:58 +02:00
}
func save(_ objects: [DatabaseObject], in database: FMDatabase) {
// TODO
}
2017-08-06 21:37:47 +02:00
}
private extension AuthorsTable {
func authorWithRow(_ row: FMResultSet) -> Author? {
2017-08-04 06:10:01 +02:00
guard let authorID = row.string(forColumn: DatabaseKey.authorID) else {
2017-08-04 06:10:01 +02:00
return nil
}
if let cachedAuthor = cache[authorID] as? Author {
2017-08-04 06:10:01 +02:00
return cachedAuthor
2017-07-13 22:38:47 +02:00
}
guard let author = Author(authorID: authorID, row: row) else {
2017-07-13 22:38:47 +02:00
return nil
}
2017-08-04 06:10:01 +02:00
cache[authorID] = author
2017-07-13 22:38:47 +02:00
return author
}
}