Moved batching logic inside the members importer module

no issue

- This way importer is more self contained and controller logic doesn't have to know about batch sizes and other unecessary variables
This commit is contained in:
Nazar Gargol 2020-08-13 20:31:11 +12:00
parent c434666ba2
commit 78b4dff656
2 changed files with 19 additions and 16 deletions

View File

@ -596,19 +596,14 @@ module.exports = {
}));
}
const CHUNK_SIZE = 100;
const memberBatches = _.chunk(sanitized, CHUNK_SIZE);
return Promise.map(memberBatches, async (membersBatch) => {
return doImport({
membersBatch,
members: sanitized,
allLabelModels,
importSetLabels,
imported,
invalid,
createdBy
});
});
}).then(() => {
// NOTE: grouping by context because messages can contain unique data like "customer_id"
const groupedErrors = _.groupBy(invalid.errors, 'context');

View File

@ -124,11 +124,19 @@ const doImport = async ({membersBatch: members, allLabelModels, importSetLabels,
try {
// TODO: below inserts most likely need to be wrapped into transaction
// to avoid creating orphaned member_labels connections
const CHUNK_SIZE = 5000;
const chunkedMembers = _.chunk(mappedMemberBatchData, CHUNK_SIZE);
for (const data of chunkedMembers) {
await db.knex('members')
.insert(mappedMemberBatchData);
.insert(data);
}
const chunkedLebelAssociations = _.chunk(mappedMembersLabelsBatchAssociations, CHUNK_SIZE);
for (const data of chunkedLebelAssociations) {
await db.knex('members_labels')
.insert(mappedMembersLabelsBatchAssociations);
.insert(data);
}
imported.count += mappedMemberBatchData.length;
} catch (error) {