mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-11-27 18:52:14 +03:00
Moved email sending to the background job queue
no issue - moves the meat of `pendingEmailHandler()` code into a new function `sendEmailJob()` that is passed over to the new job service - lets the server keep processing email generation and sending when it receives a shutdown request rather than halting processing mid-send and ending up in a partial state
This commit is contained in:
parent
5f84f0e42c
commit
c7ff4c9e93
@ -7,6 +7,7 @@ const {events, i18n} = require('../../lib/common');
|
||||
const logging = require('../../../shared/logging');
|
||||
const membersService = require('../members');
|
||||
const bulkEmailService = require('../bulk-email');
|
||||
const jobService = require('../jobs');
|
||||
const models = require('../../models');
|
||||
const postEmailSerializer = require('./post-email-serializer');
|
||||
|
||||
@ -184,18 +185,8 @@ async function handleUnsubscribeRequest(req) {
|
||||
}
|
||||
}
|
||||
|
||||
async function pendingEmailHandler(emailModel, options) {
|
||||
// CASE: do not send email if we import a database
|
||||
// TODO: refactor post.published events to never fire on importing
|
||||
if (options && options.importing) {
|
||||
return;
|
||||
}
|
||||
async function sendEmailJob({emailModel, options}) {
|
||||
const postModel = await models.Post.findOne({id: emailModel.get('post_id')}, {withRelated: ['authors']});
|
||||
|
||||
if (emailModel.get('status') !== 'pending') {
|
||||
return;
|
||||
}
|
||||
|
||||
let meta = [];
|
||||
let error = null;
|
||||
let startEmailSend = null;
|
||||
@ -262,7 +253,7 @@ async function pendingEmailHandler(emailModel, options) {
|
||||
status: batchStatus,
|
||||
meta: JSON.stringify(successes),
|
||||
error: error,
|
||||
error_data: JSON.stringify(failures) // NOTE:need to discuss how we store this
|
||||
error_data: JSON.stringify(failures) // NOTE: need to discuss how we store this
|
||||
}, {
|
||||
id: emailModel.id
|
||||
});
|
||||
@ -271,6 +262,20 @@ async function pendingEmailHandler(emailModel, options) {
|
||||
}
|
||||
}
|
||||
|
||||
async function pendingEmailHandler(emailModel, options) {
|
||||
// CASE: do not send email if we import a database
|
||||
// TODO: refactor post.published events to never fire on importing
|
||||
if (options && options.importing) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (emailModel.get('status') !== 'pending') {
|
||||
return;
|
||||
}
|
||||
|
||||
return jobService.addJob(sendEmailJob, {emailModel, options});
|
||||
}
|
||||
|
||||
const statusChangedHandler = (emailModel, options) => {
|
||||
const emailRetried = emailModel.wasChanged()
|
||||
&& emailModel.get('status') === 'pending'
|
||||
|
Loading…
Reference in New Issue
Block a user