UNPKG

tuain-bpm-lib

Version:

Servicio de gestión de manejo de procesos de la plataforma Tuain

117 lines (111 loc) 4.29 kB
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, };