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

View File

@ -1,4 +1,4 @@
import dotenv from 'dotenv';
import dotenv from "dotenv";
// Set the NODE_ENV to 'development' by default
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 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 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")) {
channels.forEach((value) => {
@ -25,29 +35,29 @@ export default function generate(filter) {
if (filter.includes("Sub-Channel")) {
subChannels.forEach((value) => {
data.nodes.push({
name: value,
category: "Sub-Channel",
});
data.nodes.push({
name: value,
category: "Sub-Channel",
});
});
}
if (filter.includes("Queue")) {
queues.forEach((value) => {
data.nodes.push({
name: value,
category: "Queue",
});
data.nodes.push({
name: value,
category: "Queue",
});
});
}
if (filter.includes("Outcome")) {
outcomes.forEach((value) => {
data.nodes.push({
name: value,
category: "Outcome",
});
data.nodes.push({
name: value,
category: "Outcome",
});
});
}
data.links.push(

File diff suppressed because one or more lines are too long