diff options
Diffstat (limited to 'server/model/group.js')
-rw-r--r-- | server/model/group.js | 46 |
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; |