refactored to pair down code.

This commit is contained in:
Peter Morton 2023-07-10 04:30:35 +01:00
parent ebbbb6ad57
commit c1be8ed22e
5 changed files with 21120 additions and 21242 deletions

View File

@ -5,96 +5,74 @@ import { logger } from "../../utils/index.js";
const router = Router(); const router = Router();
router.get("/", (req, res) => { router.get("/", (req, res) => {
var data = {
nodes: [],
links: [],
};
const filter = req.query.filter; const filter = req.query.filter;
// nodes var chain = {};
var channels = []; var filterNames = filter.split(",");
var queues = []; for (let index = 0; index < filterNames.length - 1; index++) {
var outcomes = []; chain[filterNames[index] + "-" + filterNames[index + 1]] = true;
}
// links
var channel_queue_links = {};
var channel_outcome_links = {};
var queue_outcome_links = {};
sampleUDG.data.findContactsCompletedBetween.edges.forEach((value) => { sampleUDG.data.findContactsCompletedBetween.edges.forEach((value) => {
const hasChannel = value.node.interaction.__typename ? true : false; addNode(filter, "Channel", value.node.interaction.__typename, data);
const hasQueue = value.node.queue ? true : false;
const hasOutcome = value.node.outcome ? true : false;
// NODES if (value.node.interaction.subChannel) {
if ( addNode(filter, "SubChannel", value.node.interaction.subChannel, data);
hasChannel && if (chain["Channel-SubChannel"]) {
channels.indexOf(value.node.interaction.__typename) == -1 addLink(
) { data,
channels.push(value.node.interaction.__typename); value.node.interaction.__typename,
} value.node.interaction.subChannel
);
if (hasQueue) {
const queue = JSON.stringify(value.node.queue);
if (queues.indexOf(queue) == -1) {
queues.push(queue);
}
if (hasChannel) {
const key =
value.node.interaction.__typename + JSON.stringify(value.node.queue);
if (channel_queue_links[key]) {
channel_queue_links[key].value++;
} else {
channel_queue_links[key] = {
source: value.node.interaction.__typename,
target: JSON.stringify(value.node.queue),
value: 1,
};
}
} }
} }
if (hasOutcome) { if (value.node.queue) {
const queueName = `${value.node.queue.name}(${value.node.queue.orgScope})`;
addNode(filter, "Queue", queueName, data);
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) => { value.node.outcome.edges.forEach((element) => {
var outcome = element.node.text; addNode(filter, "Outcome", element.node.text, data);
if (outcomes.indexOf(outcome) == -1) { if (chain["Channel-Outcome"]) {
outcomes.push(outcome); addLink(data, value.node.interaction.__typename, element.node.text);
} }
if (hasQueue) { if (chain["SubChannel-Outcome"]) {
var key = outcome+JSON.stringify(value.node.queue); addSubChannelLink(element.node.text);
if (queue_outcome_links[key]) {
queue_outcome_links[key].value++;
} else {
queue_outcome_links[key] = {
source: JSON.stringify(value.node.queue),
target: outcome,
value: 1,
};
}
} }
if (hasChannel) { if (chain["Queue-Outcome"] && !!value.node.queue) {
key = outcome+value.node.interaction.__typename; const queueName = `${value.node.queue.name}(${value.node.queue.orgScope})`;
addLink(data, queueName, element.node.text);
if (channel_outcome_links[key]) {
channel_outcome_links[key].value++;
} else {
channel_outcome_links[key] = {
source: value.node.interaction.__typename,
target: outcome,
value: 1,
};
}
} }
}); });
} }
});
logger.debug(`channels: ${JSON.stringify(channels)}`); function addSubChannelLink(target) {
logger.debug(`queues: ${JSON.stringify(queues)}`); if (value.node.interaction.subChannel) {
logger.debug(`channel_queue_links: ${JSON.stringify(channel_queue_links)}`); addLink(data, value.node.interaction.subChannel, target);
logger.debug(`outcomes: ${JSON.stringify(outcomes)}`); } else {
// SubChannel does not exist, revert to Channel if in chain
if (chain["Channel-SubChannel"]) {
addLink(data, value.node.interaction.__typename, target);
}
}
}
});
if (req.query.useSampleData) { if (req.query.useSampleData) {
const data = sampleFlow(filter); const data = sampleFlow(filter);
@ -102,56 +80,38 @@ router.get("/", (req, res) => {
return; return;
} }
var data = { logger.debug(`Sending data: ${JSON.stringify(data,null, 2)}`);
nodes: [],
links: [],
};
if (filter.includes("Channel")) {
channels.forEach((value) => {
data.nodes.push({
name: value,
category: "Channel",
});
});
}
if (filter.includes("Queue")) {
queues.forEach((value) => {
data.nodes.push({
name: value,
category: "Queue",
});
});
}
if (filter.includes("Outcome")) {
outcomes.forEach((value) => {
data.nodes.push({
name: value,
category: "Outcome",
});
});
}
if (filter.includes("Channel") && filter.includes("Queue")) {
Object.values(channel_queue_links).forEach((element) => {
data.links.push(element);
});
}
if (filter.includes("Queue") && filter.includes("Outcome")) {
Object.values(queue_outcome_links).forEach((element) => {
data.links.push(element);
});
}
if (filter.includes("Channel") && filter.includes("Outcome") && !filter.includes("Queue")) {
Object.values(channel_outcome_links).forEach((element) => {
data.links.push(element);
});
}
res.send(data); res.send(data);
}); });
function addLink(data, source, target) {
var index = data.links.findIndex((i) => {
return i.source == source && i.target == target;
});
if (index != -1) {
data.links[index].value++;
} else {
data.links.push({
source: source,
target: target,
value: 1,
});
}
}
function addNode(filter, category, name, data) {
if (
filter.split(",").indexOf(category) != -1 &&
!!name &&
data.nodes.findIndex(
(value) => value.name === name && value.category === category
) == -1
) {
data.nodes.push({
name: name,
category: category,
});
}
}
export default router; export default router;

View File

@ -1,4 +1,4 @@
import dotenv from 'dotenv'; import dotenv from "dotenv";
// Set the NODE_ENV to 'development' by default // Set the NODE_ENV to 'development' by default
process.env.NODE_ENV = process.env.NODE_ENV || "development"; process.env.NODE_ENV = process.env.NODE_ENV || "development";

View File

@ -10,9 +10,19 @@ export default function generate(filter) {
}; };
const channels = ["Email", "Messaging", "Legacy Live Chat"]; const channels = ["Email", "Messaging", "Legacy Live Chat"];
const subChannels = ["Live Chat", "Facebook Messenger", "Twitter DM", "WhatsApp","Other"]; const subChannels = [
"Live Chat",
"Facebook Messenger",
"Twitter DM",
"WhatsApp",
"Other",
];
const queues = ["General Enquiries", "Complaints", "Default"]; const queues = ["General Enquiries", "Complaints", "Default"];
const outcomes = ["No need for response", "Case Updated", "Escalated to Manager"]; const outcomes = [
"No need for response",
"Case Updated",
"Escalated to Manager",
];
if (filter.includes("Channel")) { if (filter.includes("Channel")) {
channels.forEach((value) => { channels.forEach((value) => {
@ -25,29 +35,29 @@ export default function generate(filter) {
if (filter.includes("Sub-Channel")) { if (filter.includes("Sub-Channel")) {
subChannels.forEach((value) => { subChannels.forEach((value) => {
data.nodes.push({ data.nodes.push({
name: value, name: value,
category: "Sub-Channel", category: "Sub-Channel",
});
}); });
});
} }
if (filter.includes("Queue")) { if (filter.includes("Queue")) {
queues.forEach((value) => { queues.forEach((value) => {
data.nodes.push({ data.nodes.push({
name: value, name: value,
category: "Queue", category: "Queue",
});
}); });
});
} }
if (filter.includes("Outcome")) { if (filter.includes("Outcome")) {
outcomes.forEach((value) => { outcomes.forEach((value) => {
data.nodes.push({ data.nodes.push({
name: value, name: value,
category: "Outcome", category: "Outcome",
});
}); });
});
} }
data.links.push( data.links.push(

File diff suppressed because one or more lines are too long