backend/src/services/dbAccess.services.js
Fred Boniface cf1b40f007 Adjust dbAccess log levels
Signed-off-by: Fred Boniface <fred@fjla.uk>
2023-09-26 21:06:29 +01:00

133 lines
3.9 KiB
JavaScript

/* global process */
const log = require("../utils/logs.utils"); // Log Helper
const logger = require("../utils/logger.utils"); // New Logger
const dbUser = process.env.OWL_DB_USER || "owl";
const dbPass = process.env.OWL_DB_PASS || "twittwoo";
const dbName = process.env.OWL_DB_NAME || "owlboard";
const dbPort = process.env.OWL_DB_PORT || 27017;
const dbHost = process.env.OWL_DB_HOST || "localhost";
const uri = `mongodb://${dbUser}:${dbPass}@${dbHost}:${dbPort}`;
const { MongoClient } = require("mongodb");
const client = new MongoClient(uri);
const db = client.db(dbName);
async function query(collection, query, returnId = false) {
await client.connect();
logger.logger.trace(`dbAccess.query: Connecting to collection: '${collection}'`)
var qcoll = db.collection(collection);
var qcursor = qcoll.find(query);
if (!returnId) {
qcursor.project({ _id: 0 });
}
logger.logger.trace(query, "dbAccess.query: Runnung Query")
increment(collection);
let result = await qcursor.toArray();
logger.logger.trace(result, "dbAccess.query: Response");
return result;
}
async function queryProject(collection, query, projection) {
await client.connect();
log.out(`dbAccess.queryProject: Connecting to col: '${collection}'`, "info");
const qcoll = db.collection(collection);
const qcursor = qcoll.find(query).project(projection);
log.out(
`dbAccess.query: Running Query: ${JSON.stringify(
query
)}, Projection: ${JSON.stringify(projection)}`,
"dbug"
);
increment(collection);
return await qcursor.toArray();
}
async function queryAggregate(collection, pipeline) {
await client.connect();
log.out(`dbAccess.queryProject: Connecting to col: '${collection}'`, "info");
log.out(
`dbAccess.query: Running Aggregation: ${JSON.stringify(pipeline)}`,
"dbug"
);
increment(collection);
return await db.collection(collection).aggregate(pipeline).toArray();
}
async function increment(target) {
logger.logger.debug(`dbAccess.increment: Incrementing counter for: ${target}`)
await client.connect();
let col = db.collection("meta");
let update = {};
update[target] = 1;
col.updateOne({ target: "counters" }, { $inc: update });
}
async function addUser(uuid, domain) {
// Needs testing
log.out("dbAccess.addUser: Adding user to database");
let doc = { uuid: uuid, domain: domain, atime: new Date() };
await client.connect();
let col = db.collection("users");
let res = await col.insertOne(doc);
if (res.insertedId) {
return true;
}
return false;
}
async function addRegReq(uuid, domain) {
// Needs testing
log.out("dbAccess.addRegReq: Adding registration request");
let doc = { uuid: uuid, time: new Date(), domain: domain };
await client.connect();
let col = db.collection("registrations");
let res = col.insertOne(doc);
return res;
}
async function userAtime(uuid) {
// Needs testing
log.out("dbAccess.userAtime: Updating access time for user");
let q = { uuid: uuid };
let n = { $set: { uuid: uuid, atime: new Date() } };
await client.connect();
let col = db.collection("users");
let res = col.updateOne(q, n, { upsert: true });
return res;
}
// Deletes one single registration request entry from the DB
async function delRegReq(uuid) {
log.out("dbAccess.delRegReq: Deleting a Registration Request");
let collection = "registrations";
await client.connect();
let col = db.collection(collection);
col.deleteOne({ uuid: uuid });
}
async function colCount(collection) {
log.out(`dbAccess.colCount: Counting entries in collection: ${collection}`);
await client.connect();
let col = db.collection(collection);
let count = col.countDocuments();
log.out(
`dbAccess.colCount: Collection: ${collection} contains ${count}` +
" documents"
);
return await count;
}
module.exports = {
query,
queryProject,
queryAggregate,
increment,
addUser,
userAtime,
addRegReq,
delRegReq,
colCount,
};