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();
|
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;
|
||||||
|
|||||||
@ -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";
|
||||||
|
|||||||
@ -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
Loading…
x
Reference in New Issue
Block a user