68 lines
1.7 KiB
JavaScript
68 lines
1.7 KiB
JavaScript
"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;
|