summaryrefslogtreecommitdiffstats
path: root/server/model/group.js
diff options
context:
space:
mode:
Diffstat (limited to 'server/model/group.js')
-rw-r--r--server/model/group.js46
1 files changed, 46 insertions, 0 deletions
diff --git a/server/model/group.js b/server/model/group.js
new file mode 100644
index 0000000..bd2c301
--- /dev/null
+++ b/server/model/group.js
@@ -0,0 +1,46 @@
+const { BeanModel } = require("redbean-node/dist/bean-model");
+const { R } = require("redbean-node");
+
+class Group extends BeanModel {
+
+ /**
+ * Return an object that ready to parse to JSON for public Only show
+ * necessary data to public
+ * @param {boolean} showTags Should the JSON include monitor tags
+ * @param {boolean} certExpiry Should JSON include info about
+ * certificate expiry?
+ * @returns {Promise<object>} Object ready to parse
+ */
+ async toPublicJSON(showTags = false, certExpiry = false) {
+ let monitorBeanList = await this.getMonitorList();
+ let monitorList = [];
+
+ for (let bean of monitorBeanList) {
+ monitorList.push(await bean.toPublicJSON(showTags, certExpiry));
+ }
+
+ return {
+ id: this.id,
+ name: this.name,
+ weight: this.weight,
+ monitorList,
+ };
+ }
+
+ /**
+ * Get all monitors
+ * @returns {Promise<Bean[]>} List of monitors
+ */
+ async getMonitorList() {
+ return R.convertToBeans("monitor", await R.getAll(`
+ SELECT monitor.*, monitor_group.send_url FROM monitor, monitor_group
+ WHERE monitor.id = monitor_group.monitor_id
+ AND group_id = ?
+ ORDER BY monitor_group.weight
+ `, [
+ this.id,
+ ]));
+ }
+}
+
+module.exports = Group;