MongoView/MongoView/MongoController.swift

65 lines
1.4 KiB
Swift

//
// MongoController.swift
// MongoView
//
// Created by Shadowfacts on 1/8/20.
// Copyright © 2020 Shadowfacts. All rights reserved.
//
import Foundation
import MongoSwift
import NIO
class MongoController {
let connectionString: String
var group: EventLoopGroup!
var client: MongoClient!
var status: Status = .connecting {
didSet {
statusDidChange.forEach { $0(status) }
}
}
var statusDidChange = [(Status) -> Void]()
init(connectionString: String) {
self.connectionString = connectionString
}
deinit {
try! group.syncShutdownGracefully()
cleanupMongoSwift()
}
func setup() {
print("setting up mongo")
group = MultiThreadedEventLoopGroup(numberOfThreads: 1)
do {
client = try MongoClient(connectionString, using: group)
status = .success
} catch {
status = .failed
print("Failed to connect to Mongo: \(error)")
}
}
func db(for collection: DatabaseCollection) -> MongoDatabase {
return client.db(collection.database)
}
func collection(_ collection: DatabaseCollection) -> MongoCollection<Document> {
return db(for: collection).collection(collection.name)
}
}
extension MongoController {
enum Status {
case connecting, success, failed
}
}