0
Fork 0
mirror of https://github.com/TryGhost/Ghost.git synced 2025-02-03 23:00:14 -05:00

Extracted email preview service

refs https://github.com/TryGhost/Team/issues/694

- The code complexity in the email preview's read controller method was breaking the complexity rule in ESLint. To reduce the complexity extracted common parts into mega service
This commit is contained in:
Naz 2021-09-02 12:32:21 +04:00
parent c6fc3902c5
commit 807322dccb
4 changed files with 58 additions and 31 deletions

View file

@ -4,6 +4,11 @@ const errors = require('@tryghost/errors');
const mega = require('../../services/mega');
const labs = require('../../../shared/labs');
const emailPreview = new mega.EmailPreview({
apiVersion: 'canary',
isSet: labs.isSet.bind(labs)
});
module.exports = {
docName: 'email_preview',
@ -34,23 +39,7 @@ module.exports = {
});
}
let emailContent = await mega.postEmailSerializer.serialize(model, {
isBrowserPreview: true,
apiVersion: 'canary'
});
if (labs.isSet('emailCardSegments') && frame.options.memberSegment) {
emailContent = mega.postEmailSerializer.renderEmailForSegment(emailContent, frame.options.memberSegment);
}
const replacements = mega.postEmailSerializer.parseReplacements(emailContent);
replacements.forEach((replacement) => {
emailContent[replacement.format] = emailContent[replacement.format].replace(
replacement.match,
replacement.fallback || ''
);
});
return emailContent;
return emailPreview.generateEmailContent(model, frame.options.memberSegment);
}
},
sendTestEmail: {

View file

@ -3,6 +3,10 @@ const i18n = require('../../../shared/i18n');
const errors = require('@tryghost/errors');
const mega = require('../../services/mega');
const emailPreview = new mega.EmailPreview({
apiVersion: 'v3'
});
module.exports = {
docName: 'email_preview',
@ -32,20 +36,7 @@ module.exports = {
});
}
let emailContent = await mega.postEmailSerializer.serialize(model, {
isBrowserPreview: true,
apiVersion: 'v3'
});
const replacements = mega.postEmailSerializer.parseReplacements(emailContent);
replacements.forEach((replacement) => {
emailContent[replacement.format] = emailContent[replacement.format].replace(
replacement.match,
replacement.fallback || ''
);
});
return emailContent;
return emailPreview.generateEmailContent(model, frame.options.memberSegment);
}
},
sendTestEmail: {

View file

@ -0,0 +1,43 @@
const postEmailSerializer = require('./post-email-serializer');
class EmailPreview {
/**
* @constructor
* @param {Object} options
* @param {String} options.apiVersion
* @param {Function} [options.isSet]
*/
constructor({apiVersion, isSet}) {
this.apiVersion = apiVersion;
this.isSet = isSet;
}
/**
* @param {Object} post - Post model object instance
* @param {String} memberSegment - member segment filter
* @returns {Promise<Object>}
*/
async generateEmailContent(post, memberSegment) {
let emailContent = await postEmailSerializer.serialize(post, {
isBrowserPreview: true,
apiVersion: this.apiVersion
});
if (this.isSet && this.isSet('emailCardSegments') && memberSegment) {
emailContent = postEmailSerializer.renderEmailForSegment(emailContent, memberSegment);
}
const replacements = postEmailSerializer.parseReplacements(emailContent);
replacements.forEach((replacement) => {
emailContent[replacement.format] = emailContent[replacement.format].replace(
replacement.match,
replacement.fallback || ''
);
});
return emailContent;
}
}
module.exports = EmailPreview;

View file

@ -5,6 +5,10 @@ module.exports = {
get postEmailSerializer() {
return require('./post-email-serializer');
},
get EmailPreview() {
return require('./email-preview');
}
};