Add functions for DB access
This commit is contained in:
1 parent
327cb78f1a
commit
12cdc8a6f1
6 files changed
+114
-26
No files matched your search
@@ -0,0 +1,67 @@
|
||||
"use strict";
|
||||
|
||||
const MongoClient = require("mongodb").MongoClient;
|
||||
const config = require("./config");
|
||||
const apiFunctions = require("./api-functions");
|
||||
|
||||
let _client = null;
|
||||
|
||||
function getClient() {
|
||||
if (_client) return Promise.resolve(_client);
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
const CONNECTION_URL = config.get("server.mongodbConnectionUrl");
|
||||
MongoClient.connect(CONNECTION_URL, (err, client) => {
|
||||
if (err) return reject(err);
|
||||
resolve((_client = client.db("genieacs-ui")));
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function query(resource, filter, limit, skip, callback) {
|
||||
let q;
|
||||
if (filter && filter.ast) q = apiFunctions.filterToMongoQuery(filter.ast);
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
getClient().then(client => {
|
||||
const collection = client.collection(resource);
|
||||
if (!callback)
|
||||
collection
|
||||
.find(q)
|
||||
.skip(skip || 0)
|
||||
.limit(limit || 0)
|
||||
.toArray((err, docs) => {
|
||||
if (err) return reject(err);
|
||||
return resolve(docs);
|
||||
});
|
||||
else
|
||||
collection.find(q).forEach(
|
||||
doc => {
|
||||
callback(doc);
|
||||
},
|
||||
err => {
|
||||
if (err) reject(err);
|
||||
else resolve();
|
||||
}
|
||||
);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function count(resource, filter) {
|
||||
let q;
|
||||
if (filter && filter.ast) q = apiFunctions.filterToMongoQuery(filter.ast);
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
getClient().then(client => {
|
||||
const collection = client.collection(resource);
|
||||
collection.find(q).count((err, c) => {
|
||||
if (err) reject(err);
|
||||
else resolve(c);
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
exports.query = query;
|
||||
exports.count = count;
|
||||
Reference in new issue
Block a user