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

Removed support for batched CSV importer

no-issue

We are rewriting the Members CSV importer to use background jobs, the
batched importer will no longer be used locally.
This commit is contained in:
Fabien O'Carroll 2020-12-09 16:05:10 +00:00 committed by Fabien 'egg' O'Carroll
parent baf635e27b
commit 83c5270217
2 changed files with 0 additions and 104 deletions

View file

@ -6,8 +6,6 @@ const errors = require('@tryghost/errors');
const config = require('../../../shared/config');
const models = require('../../models');
const membersService = require('../../services/members');
const doImport = require('../../services/members/importer');
const memberLabelsImporter = require('../../services/members/importer/labels');
const settingsCache = require('../../services/settings/cache');
const {i18n} = require('../../lib/common');
const logging = require('../../../shared/logging');
@ -593,102 +591,6 @@ module.exports = {
}
},
importCSVBatched: {
statusCode: 201,
permissions: {
method: 'add'
},
async query(frame) {
let imported = {
count: 0
};
let invalid = {
count: 0,
errors: []
};
let duplicateStripeCustomerIdCount = 0;
// NOTE: redacted copy from models.Base module
const contextUser = (options) => {
options = options || {};
options.context = options.context || {};
if (options.context.user || models.Base.Model.isExternalUser(options.context.user)) {
return options.context.user;
} else if (options.context.integration) {
return models.Base.Model.internalUser;
}
};
const createdBy = contextUser(frame.options);
let {allLabels, importSetLabels, importLabel} = await memberLabelsImporter.handleAllLabels(
frame.data.labels,
frame.data.members,
settingsCache.get('timezone'),
frame.options
);
return Promise.resolve().then(async () => {
const {sanitized, invalidCount, validationErrors, duplicateStripeCustomersCount} = await sanitizeInput(frame.data.members);
invalid.count += invalidCount;
duplicateStripeCustomerIdCount = duplicateStripeCustomersCount;
if (validationErrors.length) {
invalid.errors.push(...validationErrors);
}
return doImport({
members: sanitized,
labels: allLabels,
importSetLabels,
createdBy
});
}).then(async (result) => {
invalid.errors = invalid.errors.concat(result.invalid.errors);
invalid.count += result.invalid.count;
imported.count += result.imported.count;
// NOTE: grouping by context because messages can contain unique data like "customer_id"
const groupedErrors = _.groupBy(invalid.errors, 'context');
const uniqueErrors = _.uniqBy(invalid.errors, 'context');
const outputErrors = uniqueErrors.map((error) => {
let errorGroup = groupedErrors[error.context];
let errorCount = errorGroup.length;
if (error.message === i18n.t('errors.api.members.duplicateStripeCustomerIds.message')) {
errorCount = duplicateStripeCustomerIdCount;
}
// NOTE: filtering only essential error information, so API doesn't leak more error details than it should
return {
message: error.message,
context: error.context,
help: error.help,
count: errorCount
};
});
invalid.errors = outputErrors;
if (imported.count === 0 && importLabel && importLabel.generated) {
await models.Label.destroy(Object.assign({}, {id: importLabel.id}, frame.options));
importLabel = null;
}
return {
meta: {
stats: {
imported,
invalid
},
import_label: importLabel
}
};
});
}
},
stats: {
options: [
'days'
@ -809,9 +711,3 @@ module.exports = {
}
}
};
// NOTE: remove below condition once batched import is production ready,
// remember to swap out current importCSV method when doing so
if (config.get('enableDeveloperExperiments')) {
module.exports.importCSV = module.exports.importCSVBatched;
delete module.exports.importCSVBatched;
}