UNPKG

synt_backend

Version:

Synt light-weight node backend service

217 lines (177 loc) 4.8 kB
const express = require("express"); const router = express.Router(); const db = require("./../mysql/models/index"); const userHelper = require("../helpers/user"); import * as ValidationHelper from "../helpers/validations"; import { getVMEReminderById, getVMEReminders, postVMEReminder, setupRemindersForVME, } from "../database/reminders"; import { jobReminderManager } from "../helpers/JobReminderManager"; const notifier = require("./../helpers/notifier"); function validateUserAndVme(next) { return async (req, res) => { const { t } = req; const user = await userHelper.getAuthUser(req); if (user) { // verify vme and get vme let VmeValidation = await ValidationHelper.validateVme(t, user.VMEId); //TODO: Validate user roles if (!VmeValidation.success) { return res.json(VmeValidation); } const { VME } = VmeValidation; return await next(req, res, { user, VME }); } return res.json({ success: false, }); }; } const getReminder = validateUserAndVme(async (req, res, { VME }) => { const { ReminderId } = req.params; const Reminder = await getVMEReminderById({ reminderId: ReminderId, vmeId: VME.id, }); return res.json({ success: true, Reminder }); }); const getReminders = validateUserAndVme(async (req, res, { VME }) => { const Reminders = await getVMEReminders({ vmeId: VME.id }); return res.json({ success: true, Reminders }); }); const deleteReminder = validateUserAndVme(async (req, res, { VME }) => { const { ReminderId } = req.params; const Reminder = await getVMEReminderById({ reminderId: ReminderId, vmeId: VME.id, }); if (Reminder) { await Reminder.destroy(); } try { jobReminderManager.stopReminder(ReminderId); } catch (error) { console.log(error); } return res.json({ success: true, Reminder }); }); const postReminder = validateUserAndVme(async (req, res, { VME }) => { const { t } = req; const { id, Label, dateOfReceiving, users, active = true, type } = req.body; let { recipient } = req.body; let errors = {}; if (type === "message" && !Label) { errors.name = t( "api.reminders.errors.messageRequired", "Message is required" ); } if (type === "unpaid provision") { // set recipients to the owners recipient = "owners"; } if (!recipient) { errors.recipient = t( "api.reminders.errors.recipientRequired", "Recipient is required" ); } if (!dateOfReceiving) { errors.dateOfReceiving = t( "api.reminders.errors.dateOfReceivingRequired", "Receiving date is required" ); } if (recipient === "custom" && !users) { errors.users = t( "api.reminders.errors.users", "Users are required when recipient type is custom" ); } if (Object.keys(errors).length > 0) { return res.json({ success: false, errors, }); } const Reminder = await postVMEReminder({ dateOfReceiving, Label, recipient, reminderId: id, vmeId: VME.id, users, active, type, }); try { jobReminderManager.scheduleReminder(Reminder.toJSON()); } catch (error) { console.log(error); } return res.json({ success: true, Reminder }); }); const setupRemindersForVMEController = validateUserAndVme(async (req, res) => { const { t } = req; const { vmeId } = req.params; await setupRemindersForVME(t, vmeId); return res.json({ success: true }); }); const postImmediateReminders = validateUserAndVme(async (req, res, { VME }) => { const { t } = req; const { type, data } = req.body; if (!data) { return res.json({ success: false, errors: { data: t("api.reminders.errors.remindersRequired"), }, }); } if (!type) { return res.json({ success: false, errors: { type: t("api.reminders.errors.typeRequired"), }, }); } if (type === "provisions") { db.Provision.findAll({ where: { id: data.map((d) => d.id), }, include: [ { model: db.User, }, { model: db.Lot, }, { model: db.ProvisionFile, }, ], }).then((provisions) => { provisions.forEach((P) => { P.Users.forEach((U) => { notifier.notify(U, "remind_provision", { Provision: P, VME, }); }); }); }); } return res.json({ success: true }); }); // routes router.get("/:ReminderId", getReminder); router.get("/", getReminders); router.post("/", postReminder); router.post("/forVME/:vmeId", setupRemindersForVMEController); router.delete("/:ReminderId", deleteReminder); router.post("/immediate", postImmediateReminders); module.exports = router;