MongoView/MongoView/MongoController.swift

61 lines
1.3 KiB
Swift

//
// MongoController.swift
// MongoView
//
// Created by Shadowfacts on 1/8/20.
// Copyright © 2020 Shadowfacts. All rights reserved.
//
import Foundation
import MongoSwift
import NIO
import Combine
class MongoController {
let connectionString: String
var group: EventLoopGroup!
var client: MongoClient!
@Published var status: ConnectionStatus = .connecting
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 = .connected
} 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 ConnectionStatus {
case connecting, connected, failed
}
}