feature/IO-3357-Reynolds-and-Reynolds-DMS-API-Integration - Checkpoint
This commit is contained in:
@@ -1,208 +0,0 @@
|
||||
/**
|
||||
* @file rrRoutes.js
|
||||
* @description Express Router for Reynolds & Reynolds (Rome) DMS integration.
|
||||
* Provides endpoints for lookup, customer management, repair orders, and full job export.
|
||||
*/
|
||||
|
||||
const express = require("express");
|
||||
const router = express.Router();
|
||||
|
||||
const validateFirebaseIdTokenMiddleware = require("../middleware/validateFirebaseIdTokenMiddleware");
|
||||
const withUserGraphQLClientMiddleware = require("../middleware/withUserGraphQLClientMiddleware");
|
||||
|
||||
const { RrCombinedSearch, RrGetAdvisors, RrGetParts } = require("../rr/rr-lookup");
|
||||
const { RrCustomerInsert, RrCustomerUpdate } = require("../rr/rr-customer");
|
||||
const { CreateRepairOrder, UpdateRepairOrder } = require("../rr/rr-repair-orders");
|
||||
const { ExportJobToRR } = require("../rr/rr-job-export");
|
||||
const RRLogger = require("../rr/rr-logger");
|
||||
|
||||
/**
|
||||
* Apply global middlewares:
|
||||
* - Firebase token validation (auth)
|
||||
* - GraphQL client injection (Hasura access)
|
||||
*/
|
||||
router.use(validateFirebaseIdTokenMiddleware);
|
||||
router.use(withUserGraphQLClientMiddleware);
|
||||
|
||||
/**
|
||||
* Health check / diagnostic route
|
||||
*/
|
||||
router.get("/", async (req, res) => {
|
||||
res.status(200).json({ provider: "Reynolds & Reynolds (Rome)", status: "OK" });
|
||||
});
|
||||
|
||||
/**
|
||||
* Full DMS export for a single job
|
||||
* POST /rr/job/export
|
||||
* Body: { JobData: {...} }
|
||||
*/
|
||||
router.post("/job/export", async (req, res) => {
|
||||
try {
|
||||
const { JobData } = req.body;
|
||||
RRLogger(req, "info", "RR /job/export initiated", { jobid: JobData?.id });
|
||||
|
||||
const result = await ExportJobToRR({
|
||||
socket: req,
|
||||
redisHelpers: req.sessionUtils,
|
||||
JobData
|
||||
});
|
||||
|
||||
res.status(result.success ? 200 : 500).json(result);
|
||||
} catch (error) {
|
||||
RRLogger(req, "error", `RR /job/export failed: ${error.message}`);
|
||||
res.status(500).json({ error: error.message });
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Customer insert
|
||||
* POST /rr/customer/insert
|
||||
*/
|
||||
router.post("/customer/insert", async (req, res) => {
|
||||
try {
|
||||
const { JobData } = req.body;
|
||||
const data = await RrCustomerInsert({
|
||||
socket: req,
|
||||
redisHelpers: req.sessionUtils,
|
||||
JobData
|
||||
});
|
||||
|
||||
res.status(200).json({ success: true, data });
|
||||
} catch (error) {
|
||||
RRLogger(req, "error", `RR /customer/insert failed: ${error.message}`);
|
||||
res.status(500).json({ success: false, error: error.message });
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Customer update
|
||||
* PUT /rr/customer/update/:id
|
||||
*/
|
||||
router.put("/customer/update/:id", async (req, res) => {
|
||||
try {
|
||||
const { JobData, existingCustomer, patch } = req.body;
|
||||
const data = await RrCustomerUpdate({
|
||||
socket: req,
|
||||
redisHelpers: req.sessionUtils,
|
||||
JobData,
|
||||
existingCustomer,
|
||||
patch
|
||||
});
|
||||
|
||||
res.status(200).json({ success: true, data });
|
||||
} catch (error) {
|
||||
RRLogger(req, "error", `RR /customer/update failed: ${error.message}`);
|
||||
res.status(500).json({ success: false, error: error.message });
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Create Repair Order
|
||||
* POST /rr/repair-order/create
|
||||
*/
|
||||
router.post("/repair-order/create", async (req, res) => {
|
||||
try {
|
||||
const { JobData, txEnvelope } = req.body;
|
||||
const data = await CreateRepairOrder({
|
||||
socket: req,
|
||||
redisHelpers: req.sessionUtils,
|
||||
JobData,
|
||||
txEnvelope
|
||||
});
|
||||
|
||||
res.status(200).json({ success: true, data });
|
||||
} catch (error) {
|
||||
RRLogger(req, "error", `RR /repair-order/create failed: ${error.message}`);
|
||||
res.status(500).json({ success: false, error: error.message });
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Update Repair Order
|
||||
* PUT /rr/repair-order/update/:id
|
||||
*/
|
||||
router.put("/repair-order/update/:id", async (req, res) => {
|
||||
try {
|
||||
const { JobData, txEnvelope } = req.body;
|
||||
const data = await UpdateRepairOrder({
|
||||
socket: req,
|
||||
redisHelpers: req.sessionUtils,
|
||||
JobData,
|
||||
txEnvelope
|
||||
});
|
||||
|
||||
res.status(200).json({ success: true, data });
|
||||
} catch (error) {
|
||||
RRLogger(req, "error", `RR /repair-order/update failed: ${error.message}`);
|
||||
res.status(500).json({ success: false, error: error.message });
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Combined search (customer + service vehicle)
|
||||
* GET /rr/lookup/combined?vin=XXX&lastname=DOE
|
||||
*/
|
||||
router.get("/lookup/combined", async (req, res) => {
|
||||
try {
|
||||
const params = Object.entries(req.query);
|
||||
const data = await RrCombinedSearch({
|
||||
socket: req,
|
||||
redisHelpers: req.sessionUtils,
|
||||
jobid: "ad-hoc",
|
||||
params
|
||||
});
|
||||
res.status(200).json({ success: true, data });
|
||||
} catch (error) {
|
||||
RRLogger(req, "error", `RR /lookup/combined failed: ${error.message}`);
|
||||
res.status(500).json({ success: false, error: error.message });
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Get Advisors
|
||||
* GET /rr/advisors
|
||||
*/
|
||||
router.get("/advisors", async (req, res) => {
|
||||
try {
|
||||
const params = Object.entries(req.query);
|
||||
const data = await RrGetAdvisors({
|
||||
socket: req,
|
||||
redisHelpers: req.sessionUtils,
|
||||
jobid: "ad-hoc",
|
||||
params
|
||||
});
|
||||
res.status(200).json({ success: true, data });
|
||||
} catch (error) {
|
||||
RRLogger(req, "error", `RR /advisors failed: ${error.message}`);
|
||||
res.status(500).json({ success: false, error: error.message });
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Get Parts
|
||||
* GET /rr/parts
|
||||
*/
|
||||
router.get("/parts", async (req, res) => {
|
||||
try {
|
||||
const params = Object.entries(req.query);
|
||||
const data = await RrGetParts({
|
||||
socket: req,
|
||||
redisHelpers: req.sessionUtils,
|
||||
jobid: "ad-hoc",
|
||||
params
|
||||
});
|
||||
res.status(200).json({ success: true, data });
|
||||
} catch (error) {
|
||||
RRLogger(req, "error", `RR /parts failed: ${error.message}`);
|
||||
res.status(500).json({ success: false, error: error.message });
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Not implemented placeholder (for future expansion)
|
||||
*/
|
||||
router.post("/calculate-allocations", async (req, res) => {
|
||||
res.status(501).json({ error: "RR calculate-allocations not yet implemented" });
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
Reference in New Issue
Block a user