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-order"); // NOTE: keep parity with /cdk endpoints so UI can flip provider with minimal diff router.use(validateFirebaseIdTokenMiddleware); // Placeholder endpoints — implement as needed: router.post("/calculate-allocations", withUserGraphQLClientMiddleware, async (req, res) => { try { const Calc = require("../cdk/cdk-calculate-allocations").default; // reuse for now const result = await Calc(req, req.body.jobid, true); // true->verbose style like Fortellis res.status(200).json({ data: result }); } catch (e) { res.status(500).json({ error: e.message }); } }); // Example: load RR makes/models someday router.post("/getvehicles", withUserGraphQLClientMiddleware, async (req, res) => { res.status(501).json({ error: "RR getvehicles not implemented yet" }); }); 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({ data }); } catch (e) { res.status(500).json({ error: e.message }); } }); 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({ data }); } catch (e) { res.status(500).json({ error: e.message }); } }); 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({ data }); } catch (e) { res.status(500).json({ error: e.message }); } }); router.post("/customer/insert", async (req, res) => { try { const data = await RrCustomerInsert({ socket: req, redisHelpers: req.sessionUtils, JobData: req.body }); res.status(200).json({ data }); } catch (e) { res.status(500).json({ error: e.message }); } }); router.put("/customer/update/:id", async (req, res) => { try { const data = await RrCustomerUpdate({ socket: req, redisHelpers: req.sessionUtils, JobData: req.body.JobData, existingCustomer: req.body.existingCustomer, patch: req.body.patch }); res.status(200).json({ data }); } catch (e) { res.status(500).json({ error: e.message }); } }); router.post("/repair-order/create", async (req, res) => { try { const data = await CreateRepairOrder({ socket: req, redisHelpers: req.sessionUtils, JobData: req.body.JobData, txEnvelope: req.body.txEnvelope }); res.status(200).json({ data }); } catch (e) { res.status(500).json({ error: e.message }); } }); router.put("/repair-order/update/:id", async (req, res) => { try { const data = await UpdateRepairOrder({ socket: req, redisHelpers: req.sessionUtils, JobData: req.body.JobData, txEnvelope: req.body.txEnvelope }); res.status(200).json({ data }); } catch (e) { res.status(500).json({ error: e.message }); } }); module.exports = router;