diff --git a/hasura/metadata/tables.yaml b/hasura/metadata/tables.yaml index 00be05ed1..f1678c62e 100644 --- a/hasura/metadata/tables.yaml +++ b/hasura/metadata/tables.yaml @@ -3769,6 +3769,27 @@ - active: _eq: true event_triggers: + - name: job_status_transition + definition: + enable_manual: false + insert: + columns: '*' + update: + columns: + - status + retry_conf: + interval_sec: 10 + num_retries: 0 + timeout_sec: 60 + webhook_from_env: HASURA_API_URL + headers: + - name: event-secret + value_from_env: EVENT_SECRET + request_transform: + query_params: {} + template_engine: Kriti + url: '{{$base_url}}/job/statustransition' + version: 2 - name: jobs_arms definition: enable_manual: false diff --git a/server.js b/server.js index 327008c39..90d3da90f 100644 --- a/server.js +++ b/server.js @@ -129,7 +129,7 @@ var job = require("./server/job/job"); app.post("/job/totals", fb.validateFirebaseIdToken, job.totals); app.post( "/job/statustransition", - fb.validateFirebaseIdToken, + // fb.validateFirebaseIdToken, job.statustransition ); app.post("/job/totalsssu", fb.validateFirebaseIdToken, job.totalsSsu); diff --git a/server/job/job-status-transition.js b/server/job/job-status-transition.js index 0a41e7a6a..8ac622bef 100644 --- a/server/job/job-status-transition.js +++ b/server/job/job-status-transition.js @@ -7,22 +7,29 @@ const logger = require("../utils/logger"); // Dinero.defaultCurrency = "USD"; // Dinero.globalLocale = "en-CA"; Dinero.globalRoundingMode = "HALF_EVEN"; - +const path = require("path"); +const client = require("../graphql-client/graphql-client").client; +require("dotenv").config({ + path: path.resolve( + process.cwd(), + `.env.${process.env.NODE_ENV || "development"}` + ), +}); async function StatusTransition(req, res) { - const { jobid, value, bodyshopid } = req.body; - - const BearerToken = req.headers.authorization; - logger.log("job-costing-start", "DEBUG", req.user.email, jobid, null); - const client = new GraphQLClient(process.env.GRAPHQL_ENDPOINT, { - headers: { - Authorization: BearerToken, - }, - }); + if (req.headers["event-secret"] !== process.env.EVENT_SECRET) { + res.status(403).send("Unauthorized"); + return; + } + const { + id: jobid, + status: value, + shopid: bodyshopid, + } = req.body.event.data.new; try { - const { update_transitions } = await client - .setHeaders({ Authorization: BearerToken }) - .request(queries.UPDATE_OLD_TRANSITION, { + const { update_transitions } = await client.request( + queries.UPDATE_OLD_TRANSITION, + { jobid: jobid, existingTransition: { end: new Date(), @@ -30,7 +37,8 @@ async function StatusTransition(req, res) { //duration }, - }); + } + ); let duration = update_transitions.affected_rows === 0 @@ -38,29 +46,27 @@ async function StatusTransition(req, res) { : new Date(update_transitions.returning[0].end) - new Date(update_transitions.returning[0].start); - const resp2 = await client - .setHeaders({ Authorization: BearerToken }) - .request(queries.INSERT_NEW_TRANSITION, { - oldTransitionId: + const resp2 = await client.request(queries.INSERT_NEW_TRANSITION, { + oldTransitionId: + update_transitions.affected_rows === 0 + ? null + : update_transitions.returning[0].id, + duration, + newTransition: { + bodyshopid: bodyshopid, + jobid: jobid, + start: + update_transitions.affected_rows === 0 + ? new Date() + : update_transitions.returning[0].end, + prev_value: update_transitions.affected_rows === 0 ? null - : update_transitions.returning[0].id, - duration, - newTransition: { - bodyshopid: bodyshopid, - jobid: jobid, - start: - update_transitions.affected_rows === 0 - ? new Date() - : update_transitions.returning[0].end, - prev_value: - update_transitions.affected_rows === 0 - ? null - : update_transitions.returning[0].value, - value: value, - type: "status", - }, - }); + : update_transitions.returning[0].value, + value: value, + type: "status", + }, + }); //Check to see if there is an existing status transition record. //Query using Job ID, start is not null, end is null.