Newer
Older
const moment = require('moment')
const { cloneDeep } = require('lodash')

Sebastian Mihalache
committed
const Job = require('pubsweet-component-jobs')
const { getEmailCopy } = require('../emails/emailCopy')
const Email = require('@pubsweet/component-email-templating')
const scheduleReminderJob = async ({
days,
email,
subject,
timeUnit,
titleText,

Sebastian Mihalache
committed
invitationId,
expectedDate,
}) => {
const executionDate = moment()
.add(days, timeUnit)
.toISOString()

Sebastian Mihalache
committed
const queue = `reminders-${userId}-${invitationId}`
const terminations = {
4: 'first-reminder',
7: 'second-reminder',
13: 'second-reminder',
}
const emailType = `reviewer-resend-invitation-${terminations[days]}`
const { paragraph, ...bodyProps } = getEmailCopy({
titleText,
expectedDate,
})
email.bodyProps = bodyProps
email.content.subject = subject

Sebastian Mihalache
committed
const params = {
days,
timeUnit,
executionDate,

Sebastian Mihalache
committed
emailProps: cloneDeep(email),
}

Sebastian Mihalache
committed
await Job.schedule({ queue, params, executionDate, jobHandler })
}
const jobHandler = async job => {
const { days, timeUnit, executionDate, emailProps } = job.data
const email = new Email(emailProps)
await email.sendEmail()
return `Job ${job.id}: the ${days} ${timeUnit} reminder has been sent to ${
email.toUser.email
} at ${executionDate}`
module.exports = { scheduleReminderJob }