Skip to content

Commit

Permalink
purge task transaction
Browse files Browse the repository at this point in the history
  • Loading branch information
ktuite committed Sep 18, 2024
1 parent e094785 commit 19def70
Showing 1 changed file with 23 additions and 19 deletions.
42 changes: 23 additions & 19 deletions lib/task/purge.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,27 +9,31 @@

const { task } = require('./task');

const purgeTask = task.withContainer((container) => (options = {}) => container.transacting(async ({ Blobs, Forms, Submissions }) => {
let message;

try {
if (options.mode === 'submissions' || options.instanceId) {
const count = await Submissions.purge(options.force, options.projectId, options.xmlFormId, options.instanceId);
message = `Submissions purged: ${count}`;
} else if (options.mode === 'forms' || (options.formId || options.xmlFormId)) {
const count = await Forms.purge(options.force, options.formId, options.projectId, options.xmlFormId);
message = `Forms purged: ${count}`;
} else {
const formCount = await Forms.purge(options.force, options.formId, options.projectId, options.xmlFormId);
const submissionCount = await Submissions.purge(options.force, options.projectId, options.xmlFormId, options.instanceId);
message = `Forms purged: ${formCount}, Submissions purged: ${submissionCount}`;
const purgeTask = task.withContainer((container) => async (options = {}) => {
// Form/submission purging will happen within its own transaction
const message = await container.db.transaction(async trxn => {
const { Forms, Submissions } = container.with({ db: trxn });
try {
if (options.mode === 'submissions' || options.instanceId) {
const count = await Submissions.purge(options.force, options.projectId, options.xmlFormId, options.instanceId);
return `Submissions purged: ${count}`;
} else if (options.mode === 'forms' || (options.formId || options.xmlFormId)) {
const count = await Forms.purge(options.force, options.formId, options.projectId, options.xmlFormId);
return `Forms purged: ${count}`;
} else {
const formCount = await Forms.purge(options.force, options.formId, options.projectId, options.xmlFormId);
const submissionCount = await Submissions.purge(options.force, options.projectId, options.xmlFormId, options.instanceId);
return `Forms purged: ${formCount}, Submissions purged: ${submissionCount}`;
}
} catch (error) {
return error?.problemDetails?.error;
}
} catch (error) {
return error.problemDetails.error;
}
});

await Blobs.purgeUnattached();
// Purging unattached blobs is outside of the above transaction because it
// may interact with an external blob store.
await container.Blobs.purgeUnattached();
return message;
}));
});

module.exports = { purgeTask };

0 comments on commit 19def70

Please sign in to comment.