refactored to pair down code.
This commit is contained in:
parent
ebbbb6ad57
commit
c1be8ed22e
@ -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;
|
||||
|
||||
@ -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";
|
||||
|
||||
@ -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
Loading…
x
Reference in New Issue
Block a user