tuain-bpm-lib
Version:
Servicio de gestión de manejo de procesos de la plataforma Tuain
117 lines (111 loc) • 4.29 kB
JavaScript
const {
collections: { definition: { processes: processesColl } },
dbQueries: { process: processQueries },
schemas: { process: processSchemas },
} = require('../../../config');
const modErrs = {
getProcess: {
notExist: ['01', 'Proceso no encontrado'],
},
addProcessRole: {
roleExist: ['01', 'Ya existe un rol con el mismo nombre dentro del proceso'],
},
addProcessVariable: {
varExist: ['01', 'Ya existe una variable con el mismo nombre dentro del proceso'],
},
removeProcessVariable: {
notExist: ['01', 'No existe una variable con tal nombre dentro del proceso'],
},
};
async function addProcessRole(reqData) {
const inputErr = this.validateObjectStructure(processSchemas.addProcessRole, reqData);
if (inputErr) { return [inputErr, null]; }
const { procName, name, detail } = reqData;
const [procErr, procDetail] = this.locateProcess(procName);
if (procErr) { return [procErr, null]; }
const currentRole = procDetail.roles.find(roleDef => roleDef.name === name);
if (currentRole) {
const errorDetail = `El proceso ${procName} ya cuenta con un rol llamado ${name}`;
const errorObj = this.errMgr.get(modErrs.addProcessRole.roleExist, errorDetail);
return [errorObj, null];
}
const procCol = this.rwPool.collection(processesColl);
const actionResult = await procCol.updateOne(
processQueries.findProcess(this.findProcess(procName)),
processQueries.addRole({ name, detail }),
);
const result = actionResult?.result?.nModified > 0;
if (!result) {
this.logger.log({
level: 'warn',
label: 'processMethods',
action: 'addProcessRole',
message: `No se pudo efectuar Adición del rol ${name} sobre el proceso ${procName}`,
});
}
return [null, { result }];
}
async function addProcessVariable(reqData) {
const inputErr = this.validateObjectStructure(processSchemas.addProcessVariable, reqData);
if (inputErr) { return [inputErr, null]; }
const { procName, name, type, detail } = reqData;
const [procErr, procDetail] = this.locateProcess(procName);
if (procErr) { return [procErr, null]; }
const currentVar = procDetail.variables.find(varDef => varDef.name === name);
if (currentVar) {
const errorDetail = `El proceso ${procName} ya cuenta con una variable llamada ${name}`;
const errorObj = this.errMgr.get(modErrs.addProcessVariable.varExist, errorDetail);
return [errorObj, null];
}
const procCol = this.rwPool.collection(processesColl);
const actionResult = await procCol.updateOne(
processQueries.findProcess(this.findProcess(procName)),
processQueries.addVariable({ name, type, detail }),
);
const result = actionResult?.result?.nModified > 0;
if (!result) {
this.logger.log({
level: 'warn',
label: 'processMethods',
action: 'addProcessVariable',
message: `No se pudo efectuar Adición de variable ${name} sobre el proceso ${procName}`,
});
}
return [null, { result }];
}
async function removeProcessVariable(reqData) {
const inputErr = this.validateObjectStructure(processSchemas.removeProcessVariable, reqData);
if (inputErr) { return [inputErr, null]; }
const { procName, name } = reqData;
const [procErr, procDetail] = this.locateProcess(procName);
if (procErr) { return [procErr, null]; }
const currentVar = procDetail.variables.find(varDef => varDef.name === name);
if (!currentVar) {
const errorDetail = `El proceso ${procName} no cuenta con una variable llamada ${name}`;
const errorObj = this.errMgr.get(modErrs.removeProcessVariable.notExist, errorDetail);
return [errorObj, null];
}
const procCol = this.rwPool.collection(processesColl);
const actionResult = await procCol.updateOne(
processQueries.findProcess(this.findProcess(procName)),
processQueries.removeVariable(name),
);
const result = actionResult?.result?.nModified > 0;
if (!result) {
this.logger.log({
level: 'warn',
label: 'processMethods',
action: 'addProcessVariable',
message: `No se pudo efectuar Eliminación de la variable ${name} del proceso ${procName}`,
});
}
return [null, { result }];
}
module.exports = {
methods: {
addProcessRole,
addProcessVariable,
removeProcessVariable,
},
errors: modErrs,
};