From 6c1b3f8b20ff9c13ec3decc004d3c3e013551333 Mon Sep 17 00:00:00 2001 From: "Peter.Morton" Date: Mon, 7 Aug 2023 20:53:08 -0500 Subject: [PATCH] Added handling for OUTBOUND and fractional links. Also removed filtering (too complex for now) --- src/api/routes/interactions-flow.js | 74 ++++++++++++++++------------- 1 file changed, 42 insertions(+), 32 deletions(-) diff --git a/src/api/routes/interactions-flow.js b/src/api/routes/interactions-flow.js index 9ac9016..1450aee 100644 --- a/src/api/routes/interactions-flow.js +++ b/src/api/routes/interactions-flow.js @@ -14,11 +14,19 @@ router.get("/", (req, res) => { const filter = req.query.filter; - var chain = {}; - var filterNames = filter.split(","); - for (let index = 0; index < filterNames.length - 1; index++) { - chain[filterNames[index] + "-" + filterNames[index + 1]] = true; - } + var chain = { + "Direction-Channel": true, + "Channel-SubChannel": true, + "Channel-Queue": true, + "SubChannel-Queue": true, + "Queue-Outcome": true, + "Channel-Outcome": true, // special case for outbound that does not go throught queue + }; + // TODO: Chain will be hardcoded until I can work out filter logic + // var filterNames = filter.split(","); + // for (let index = 0; index < filterNames.length - 1; index++) { + // chain[filterNames[index] + "-" + filterNames[index + 1]] = true; + // } const startTime = new Date( new Date().setFullYear(new Date().getFullYear() - 2) @@ -61,7 +69,15 @@ router.get("/", (req, res) => { result.data.data.findContactsCompletedBetween.edges.forEach((value) => { // TODO: Should add INBOUND and OUTBOUND Nodes before Channel + addNode(filter, "Direction", value.node.direction, data); addNode(filter, "Channel", value.node.interaction.__typename, data); + if (chain["Direction-Channel"]) { + addLink( + data, + value.node.direction, + value.node.interaction.__typename + ); + } if (value.node.interaction.subChannel) { addNode( @@ -82,47 +98,40 @@ router.get("/", (req, res) => { if (value.node.queue) { const queueName = `${value.node.queue.name}(${value.node.queue.orgScope})`; addNode(filter, "Queue", queueName, data); - if (chain["Channel-Queue"]) { + if ( + chain["SubChannel-Queue"] && + !!value.node.interaction.subChannel + ) { + addLink(data, value.node.interaction.subChannel, queueName); + } else if (chain["Channel-Queue"]) { addLink(data, value.node.interaction.__typename, queueName); } - if (chain["SubChannel-Queue"]) { - addSubChannelLink(queueName); - } } if (value.node.outcome) { value.node.outcome.edges.forEach((element) => { addNode(filter, "Outcome", element.node.text, data); - if (chain["Channel-Outcome"]) { + if (chain["Queue-Outcome"] && !!value.node.queue) { + const queueName = `${value.node.queue.name}(${value.node.queue.orgScope})`; addLink( data, - value.node.interaction.__typename, - element.node.text + queueName, + element.node.text, + 1 / value.node.outcome.edges.length ); } - if (chain["SubChannel-Outcome"]) { - addSubChannelLink(element.node.text); - } - - if (chain["Queue-Outcome"] && !!value.node.queue) { - const queueName = `${value.node.queue.name}(${value.node.queue.orgScope})`; - addLink(data, queueName, element.node.text); + if (chain["Channel-Outcome"] && !value.node.queue) { + addLink( + data, + value.node.interaction.__typename, + element.node.text, + 1 / value.node.outcome.edges.length + ); } }); } - - function addSubChannelLink(target) { - if (value.node.interaction.subChannel) { - addLink(data, value.node.interaction.subChannel, target); - } else { - // SubChannel does not exist, revert to Channel if in chain - if (chain["Channel-SubChannel"]) { - addLink(data, value.node.interaction.__typename, target); - } - } - } }); logger.debug(`Sending data: ${JSON.stringify(data, null, 2)}`); @@ -136,7 +145,8 @@ router.get("/", (req, res) => { } }); -function addLink(data, source, target) { +function addLink(data, source, target, _fraction) { + var fraction = _fraction ? _fraction : 1; var index = data.links.findIndex((i) => { return i.source == source && i.target == target; }); @@ -146,7 +156,7 @@ function addLink(data, source, target) { data.links.push({ source: source, target: target, - value: 1, + value: fraction, }); } }