diff --git a/src/api/routes/index.js b/src/api/routes/index.js index 44d80a2..a5e23a3 100644 --- a/src/api/routes/index.js +++ b/src/api/routes/index.js @@ -3,6 +3,7 @@ import config from "./config.js"; import auth from "./auth.js"; import interactionsFlows from "./interactions-flow.js"; import udg from "./unified-data-gateway.js"; +import tps from "./tps.js"; const router = Router(); import middlewares from "../middlewares/index.js"; @@ -13,5 +14,6 @@ router.use("/config", config); router.use("/auth", auth); router.use("/interactions-flow", interactionsFlows); router.use("/unified-data-gateway", udg); +router.use("/tps", tps); export default router; diff --git a/src/api/routes/tps.js b/src/api/routes/tps.js new file mode 100644 index 0000000..6ea71d9 --- /dev/null +++ b/src/api/routes/tps.js @@ -0,0 +1,54 @@ +import { Router } from "express"; +import axios from "axios"; +import { logger, store, isEmpty } from "../../utils/index.js"; +import createHttpError from "http-errors"; + +const router = Router(); + +router.get("/", async (req, res, next) => { + const auth = await store.hGetAll(req.query.authKey); + + if (isEmpty(auth)) { + next( + new createHttpError.Forbidden( + `No authenication information found in store` + ) + ); + return; + } + + const propertyName = req.query.propertyName; + const { host, tenant, token } = auth; + logger.debug(`tps GET ${propertyName} from ${host}`); + axios + .get( + `${host}/tenant-properties-service/${tenant}/properties?q=${propertyName}`, + { + headers: { + Authorization: `OIDC_id_token ${token}`, + "Content-Type": "application/json", + }, + } + ) + .then((result) => { + if (result.data.errors && result.data.errors.length > 0) { + result.data.errors.forEach(function (error) { + logger.error("ERROR: Errors in results - " + error.message); + }); + next(new Error("Error(s) getting propertyName " + propertyName)); + return; + } + const totalItems = result.data["hydra:totalItems"]; + logger.debug("tps result has hydra:totalItems [" + totalItems + "]"); + if (totalItems > 0) { + const value = result.data["hydra:member"][0]["vcfg:value"]; + res.json({ data: { value: value } }); + } else { + next( + new createHttpError.NotFound(`property ${propertyName} not found`) + ); + } + }); +}); + +export default router; diff --git a/src/utils/sampleFlow.js b/src/utils/sampleFlow.js deleted file mode 100644 index f3b0ff3..0000000 --- a/src/utils/sampleFlow.js +++ /dev/null @@ -1,217 +0,0 @@ -import { logger } from "../utils/index.js"; - -export default function generate(filter) { - filter = filter ? filter : "Channel, Sub-Channel, Queue, Outcome"; - logger.info(`Generating sample data for ${filter}`); - - var data = { - nodes: [], - links: [], - }; - - const channels = ["Email", "Messaging", "Legacy Live Chat"]; - 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", - ]; - - if (filter.includes("Channel")) { - channels.forEach((value) => { - data.nodes.push({ - name: value, - category: "Channel", - }); - }); - } - - if (filter.includes("Sub-Channel")) { - subChannels.forEach((value) => { - data.nodes.push({ - name: value, - category: "Sub-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", - }); - }); - } - - data.links.push( - { - source: "Email", - target: "Default", - value: 342, - }, - { - source: "Messaging", - target: "Live Chat", - value: 232, - }, - { - source: "Messaging", - target: "Facebook Messenger", - value: 623, - }, - { - source: "Messaging", - target: "Twitter DM", - value: 434, - }, - { - source: "Messaging", - target: "WhatsApp", - value: 1243, - }, - { - source: "Messaging", - target: "Other", - value: 150, - }, - { - source: "Live Chat", - target: "Default", - value: 132, - }, - { - source: "Live Chat", - target: "Complaints", - value: 90, - }, - { - source: "Live Chat", - target: "General Enquires", - value: 42, - }, - { - source: "WhatsApp", - target: "Default", - value: 343, - }, - { - source: "WhatsApp", - target: "Complaints", - value: 300, - }, - { - source: "WhatsApp", - target: "General Enquires", - value: 523, - }, - { - source: "Facebook Messenger", - target: "Default", - value: 143, - }, - { - source: "Facebook Messenger", - target: "Complaints", - value: 200, - }, - { - source: "Facebook Messenger", - target: "General Enquires", - value: 323, - }, - { - source: "Twitter DM", - target: "Default", - value: 143, - }, - { - source: "Twitter DM", - target: "Complaints", - value: 50, - }, - { - source: "Twitter DM", - target: "General Enquires", - value: 223, - }, - { - source: "General Enquires", - target: "Case Closed", - value: 421, - }, - { - source: "General Enquires", - target: "Completed", - value: 612, - }, - { - source: "General Enquires", - target: "Escalated to Manager", - value: 23, - }, - { - source: "General Enquires", - target: "No need for response", - value: 241, - }, - { - source: "Complaints", - target: "Case Closed", - value: 21, - }, - { - source: "Complaints", - target: "Completed", - value: 12, - }, - { - source: "Complaints", - target: "Escalated to Manager", - value: 3, - }, - { - source: "Complaints", - target: "No need for response", - value: 41, - }, - { - source: "Default", - target: "Completed", - value: 41, - }, - { - source: "Default", - target: "Case Updated", - value: 410, - }, - { - source: "General Enquires", - target: "Case Updated", - value: 50, - }, - { - source: "Complaints", - target: "Case Updated", - value: 410, - } - ); - - return data; -}