rough build out
This commit is contained in:
199
server/routes/threadTracker.js
Normal file
199
server/routes/threadTracker.js
Normal file
@@ -0,0 +1,199 @@
|
||||
const express = require("express");
|
||||
const router = express.Router();
|
||||
const axios = require("axios");
|
||||
const qs = require("querystring");
|
||||
const { threadId } = require("worker_threads");
|
||||
|
||||
router.get("/", (req, res) => {
|
||||
// token in session -> get user data and send it back to the vue app
|
||||
if (req.session.token) {
|
||||
query();
|
||||
}
|
||||
// no token -> send nothing
|
||||
else {
|
||||
axios
|
||||
.post(
|
||||
process.env.EO_API_ACCESS_TOKEN_URL,
|
||||
qs.stringify({
|
||||
grant_type: "password",
|
||||
username: process.env.EO_API_USERNAME,
|
||||
password: process.env.EO_API_PASSWORD,
|
||||
scope: process.env.EO_API_SCOPE,
|
||||
client_id: process.env.EO_API_CLIENT_ID,
|
||||
client_secret: process.env.EO_API_SECRET,
|
||||
}),
|
||||
{
|
||||
headers: {
|
||||
"Content-Type": "application/x-www-form-urlencoded",
|
||||
},
|
||||
}
|
||||
)
|
||||
.then((result) => {
|
||||
// save token to session
|
||||
req.session.token = result.data.access_token;
|
||||
console.log(result);
|
||||
//redirect to Vue app
|
||||
query();
|
||||
})
|
||||
.catch((err) => {
|
||||
console.error(err);
|
||||
});
|
||||
}
|
||||
|
||||
function query() {
|
||||
console.log("Executing Query");
|
||||
|
||||
var query = `query ($startTime: DateTime, $endTime: DateTime) {
|
||||
findContactsCompletedBetween(startTime: $startTime, endTime: $endTime, filter: {interactionTypes : EMAIL}) {
|
||||
|
||||
totalCount
|
||||
edges {
|
||||
node {
|
||||
systemId
|
||||
startTime
|
||||
endTime
|
||||
direction
|
||||
handledBy {
|
||||
username
|
||||
firstName
|
||||
lastName
|
||||
nickname
|
||||
orgScope
|
||||
}
|
||||
activeDuration
|
||||
notes {
|
||||
totalCount
|
||||
edges {
|
||||
node {
|
||||
text
|
||||
}
|
||||
}
|
||||
}
|
||||
interaction {
|
||||
locale
|
||||
__typename
|
||||
... on Email {
|
||||
messageId
|
||||
threadId
|
||||
sentDate
|
||||
receivedDate
|
||||
subject
|
||||
fromAddress
|
||||
ccAddresses
|
||||
bccAddresses
|
||||
detectedLanguage
|
||||
mailboxName
|
||||
attachmentCount
|
||||
isDuplicate
|
||||
}
|
||||
}
|
||||
outcome {
|
||||
totalCount
|
||||
edges {
|
||||
node {
|
||||
text
|
||||
isActive
|
||||
isVisible
|
||||
}
|
||||
}
|
||||
}
|
||||
customer {
|
||||
totalCount
|
||||
edges {
|
||||
node {
|
||||
ref
|
||||
firstName
|
||||
lastName
|
||||
}
|
||||
}
|
||||
}
|
||||
queue {
|
||||
name
|
||||
orgScope
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}`;
|
||||
var startTime = new Date(
|
||||
new Date().setFullYear(new Date().getFullYear() - 1)
|
||||
);
|
||||
var endTime = new Date(new Date().setHours(new Date().getHours() - 1));
|
||||
|
||||
axios
|
||||
.post(
|
||||
process.env.EO_API_UDG_URL,
|
||||
JSON.stringify({
|
||||
query,
|
||||
variables: { startTime, endTime },
|
||||
}),
|
||||
{
|
||||
headers: {
|
||||
Authorization: `OIDC_id_token ${req.session.token}`,
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
}
|
||||
)
|
||||
.then((result) => {
|
||||
const threadId = "1000503";
|
||||
var contacts = result.data.data.findContactsCompletedBetween.edges;
|
||||
var filteredContacts = [];
|
||||
for (const contact of contacts) {
|
||||
if (
|
||||
contact.node.interaction.__typename === "Email" &&
|
||||
contact.node.interaction.threadId === threadId
|
||||
) {
|
||||
filteredContacts.push(contact);
|
||||
}
|
||||
}
|
||||
result.data.data.findContactsCompletedBetween.edges = filteredContacts;
|
||||
result.data.data.findContactsCompletedBetween.totalCount =
|
||||
filteredContacts.length;
|
||||
|
||||
// calculate elapsed
|
||||
var contactReceived = new Date(
|
||||
filteredContacts[0].node.interaction.receivedDate
|
||||
);
|
||||
var lastContactEndTime = new Date(
|
||||
filteredContacts[filteredContacts.length - 1].node.endTime
|
||||
);
|
||||
var firstContactStartTime = new Date(
|
||||
filteredContacts[0].node.startTime
|
||||
);
|
||||
|
||||
var totalHTDays =
|
||||
(lastContactEndTime.getTime() - contactReceived.getTime()) /
|
||||
(1000 * 3600 * 24);
|
||||
var activeHTDays =
|
||||
(lastContactEndTime.getTime() - firstContactStartTime.getTime()) /
|
||||
(1000 * 3600 * 24);
|
||||
// var totalATHours = (lastContactEndTime.getTime() - firstContactStartTime.getTime()) / (1000 * 3600);
|
||||
var totalATSeconds = 0;
|
||||
for (const contact of filteredContacts) {
|
||||
totalATSeconds += contact.node.activeDuration;
|
||||
}
|
||||
var totalATHours = totalATSeconds / (60 * 60);
|
||||
|
||||
result.data.data.findContactsCompletedBetween.totalHTDays =
|
||||
totalHTDays.toPrecision(5);
|
||||
result.data.data.findContactsCompletedBetween.activeHTDays =
|
||||
activeHTDays.toPrecision(5);
|
||||
result.data.data.findContactsCompletedBetween.totalATHours =
|
||||
totalATHours.toPrecision(5);
|
||||
|
||||
if (result.data) {
|
||||
res.send(result.data);
|
||||
}
|
||||
|
||||
// expired token -> send nothing
|
||||
else {
|
||||
req.session.destroy();
|
||||
res.send({});
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
});
|
||||
}
|
||||
});
|
||||
module.exports = router;
|
||||
Reference in New Issue
Block a user