52 lines
1.3 KiB
Swift
52 lines
1.3 KiB
Swift
import GRDB
|
|
|
|
struct User: Codable, FetchableRecord, PersistableRecord {
|
|
var userId: String
|
|
var publicKey: String
|
|
var isSpammer: Bool
|
|
}
|
|
|
|
final class Database: Sendable {
|
|
|
|
private let dbWriter: any DatabaseWriter
|
|
|
|
init(_ dbWriter: any GRDB.DatabaseWriter) throws {
|
|
self.dbWriter = dbWriter
|
|
try migrator.migrate(dbWriter)
|
|
}
|
|
|
|
// let dbQueue = try DatabaseQueue(path: "./db.sqlite")
|
|
//
|
|
// let db = try Connection("./db.sqlite")
|
|
|
|
private var migrator: DatabaseMigrator {
|
|
var migrator = DatabaseMigrator()
|
|
#if DEBUG
|
|
migrator.eraseDatabaseOnSchemaChange = true
|
|
#endif
|
|
migrator.registerMigration("v1") { db in
|
|
try db.create(table: "users") { t in
|
|
t.primaryKey("userId", .text).notNull()
|
|
t.column("publicKey", .text).notNull()
|
|
t.column("isSpammer", .boolean)
|
|
}
|
|
}
|
|
|
|
return migrator
|
|
}
|
|
}
|
|
|
|
extension Database {
|
|
static func makeConfiguration(_ base: Configuration = Configuration()) -> Configuration {
|
|
var config = base
|
|
return config
|
|
}
|
|
}
|
|
|
|
extension Database {
|
|
func saveUser(_ userId: String, _ publicKey: String, _ isSpammer: Bool) throws {
|
|
try dbWriter.write { db in
|
|
try User.init(userId: userId, publicKey: publicKey, isSpammer: isSpammer).insert(db)
|
|
}
|
|
}
|
|
}
|