48 lines
2.4 KiB
JavaScript
48 lines
2.4 KiB
JavaScript
const fs = require('fs');
|
|
|
|
function patchService(serviceName, entityName, createAction, updateAction) {
|
|
let code = fs.readFileSync(`backend/src/services/${serviceName}.js`, 'utf8');
|
|
|
|
// Add Logger import
|
|
if (!code.includes("const Logger = require('./logger');")) {
|
|
code = code.replace("const config = require('../config');", "const config = require('../config');\nconst Logger = require('./logger');\n");
|
|
}
|
|
|
|
// Patch create
|
|
let createMatch = new RegExp(`await ${entityName}DBApi.create([\s\S]*?);`);
|
|
if (code.includes(`await ${entityName}DBApi.create(`)) {
|
|
code = code.replace(`await ${entityName}DBApi.create(`, `const newEntity = await ${entityName}DBApi.create(`);
|
|
let commitIndex = code.indexOf('await transaction.commit();');
|
|
if (commitIndex > -1 && !code.includes(`actionType: '${createAction}'`)) {
|
|
code = code.replace(
|
|
'await transaction.commit();',
|
|
`await transaction.commit();\n if (newEntity.caseId) { await Logger.log({ organizationId: newEntity.organizationId, caseId: newEntity.caseId, actorUserId: currentUser.id, actionType: '${createAction}', message: '${createAction.replace('_', ' ')}' }); }`
|
|
);
|
|
}
|
|
}
|
|
|
|
// Patch update
|
|
let updateMatch = new RegExp(`const updated${entityName} = await ${entityName}DBApi.update([\s\S]*?);`);
|
|
if (code.includes(`const updated${entityName} = await ${entityName}DBApi.update(`) && !code.includes(`actionType: '${updateAction}'`)) {
|
|
code = code.replace(
|
|
'await transaction.commit();\n return updated',
|
|
`await transaction.commit();
|
|
let dbEntity = await ${entityName}DBApi.findBy({id});
|
|
if (dbEntity && dbEntity.caseId) {
|
|
let act = '${updateAction}';
|
|
if (data.status === 'completed' && dbEntity.status !== 'completed') act = '${entityName.toLowerCase()}_completed';
|
|
await Logger.log({ organizationId: dbEntity.organizationId, caseId: dbEntity.caseId, actorUserId: currentUser.id, actionType: act, message: act.replace('_', ' ') });
|
|
}
|
|
return updated`
|
|
);
|
|
}
|
|
|
|
fs.writeFileSync(`backend/src/services/${serviceName}.js`, code);
|
|
}
|
|
|
|
patchService('tasks', 'Tasks', 'task_created', 'task_updated');
|
|
patchService('notes', 'Notes', 'note_added', 'note_updated');
|
|
patchService('documents', 'Documents', 'document_uploaded', 'document_updated');
|
|
|
|
// Special logic for appeal_drafts: creating a new draft increments version, only one draft can be in submitted status per case.
|