// // 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 { return db(for: collection).collection(collection.name) } } extension MongoController { enum ConnectionStatus { case connecting, connected, failed } }