-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdb.js
More file actions
executable file
·116 lines (106 loc) · 3.18 KB
/
db.js
File metadata and controls
executable file
·116 lines (106 loc) · 3.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
const mongo = require("mongodb").MongoClient;
// use this url instead if no authentication enabled on database
// const url = "mongodb://localhost:27017";
const options = {
useNewUrlParser: true,
useUnifiedTopology: true
};
// pull mongo credentials from .env file
const {
MONGO_USERNAME,
MONGO_PASSWORD,
MONGO_HOSTNAME,
MONGO_PORT,
MONGO_DB
} = process.env;
const url = `mongodb://${MONGO_USERNAME}:${MONGO_PASSWORD}@${MONGO_HOSTNAME}:${MONGO_PORT}/${MONGO_DB}?authSource=admin`;
const db = (requestType, notebook, notebookId, webhookData) => {
return new Promise(resolve => {
const before = Date.now();
mongo.connect(url, options, (err, client) => {
return new Promise(resolve => {
// console.log("Connected to MongoDB");
if (err) {
console.error(err);
return;
}
const database = client.db(MONGO_DB);
const collection = database.collection("notebooks");
if (requestType === "LOAD") {
loadNotebook(collection, notebookId).then(loadedNotebook => {
resolve(loadedNotebook);
});
} else if (requestType === "SAVE") {
saveNotebook(collection, notebook).then(saveResponse => {
resolve(saveResponse);
});
} else if (requestType === "WEBHOOK") {
saveWebhookData(collection, notebookId, webhookData).then(
saveResponse => {
resolve(saveResponse);
}
);
}
}).then(queryResult => {
const after = Date.now();
const requestDuration = after - before;
console.log(`DB Query took: ${requestDuration} ms`);
client.close();
console.log("Closed connection to MongoDB");
resolve(queryResult);
});
});
});
};
module.exports = db;
const loadNotebook = (collection, notebookId) => {
return new Promise(resolve => {
collection
.findOne({ id: notebookId })
.then(loadedNotebook => {
resolve(loadedNotebook);
})
.catch(err => {
console.error(err);
return err;
});
});
};
const saveNotebook = (collection, notebook) => {
return new Promise((resolve, reject) => {
collection.updateOne(
{ id: notebook.id },
{ $set: notebook },
{ upsert: true }, // updates if exists, else inserts new entry
(err, result) => {
if (err) {
console.log(err);
reject();
} else {
console.log(`Mongo result of insertOne: ${result}`);
resolve(result);
}
}
);
});
};
const saveWebhookData = (collection, notebookId, webhookData) => {
return new Promise(resolve => {
const saveStatus = collection.updateOne(
{ id: notebookId },
{ $push: { webhookData: webhookData } },
// { upsert: true }, // assumes that notebook has been saved before registering a new webhook for that notebook id
(err, result) => {
if (err) {
console.log(err);
reject();
} else {
console.log("Webhook data added to database");
console.log(`Mongo result of insertOne: ${result}`);
return result;
}
}
);
resolve(saveStatus);
});
};