60 lines
2.0 KiB
JavaScript
60 lines
2.0 KiB
JavaScript
// server/rr/rr-config.js
|
|
// Build RR client configuration from bodyshop settings or env
|
|
|
|
function requireString(v, name) {
|
|
const s = (v ?? "").toString().trim();
|
|
if (!s || s.toLowerCase() === "undefined" || s.toLowerCase() === "null") {
|
|
throw new Error(`RR config missing: ${name}`);
|
|
}
|
|
return s;
|
|
}
|
|
|
|
/**
|
|
* Extract RR connection + routing from a bodyshop record (preferred)
|
|
* Falls back to process.env for any missing bits.
|
|
*
|
|
* Bodyshop fields expected:
|
|
* - rr_dealerid -> dealerNumber
|
|
* - rr_configuration: { storeNumber, branchNumber } -> storeNumber, areaNumber
|
|
*
|
|
* Env fallbacks:
|
|
* RR_BASE_URL, RR_USERNAME, RR_PASSWORD,
|
|
* RR_DEALER_NUMBER, RR_STORE_NUMBER, RR_BRANCH_NUMBER
|
|
*/
|
|
function getRRConfigFromBodyshop(bodyshop) {
|
|
const baseUrl = process.env.RR_BASE_URL;
|
|
const username = process.env.RR_USERNAME;
|
|
const password = process.env.RR_PASSWORD;
|
|
|
|
// NOTE: your schema uses rr_dealerid and rr_configuration JSON
|
|
const dealerNumber = bodyshop?.rr_dealerid ?? process.env.RR_DEALER_NUMBER;
|
|
|
|
const bsCfg = bodyshop?.rr_configuration || {};
|
|
const storeNumber =
|
|
bsCfg?.storeNumber ??
|
|
bodyshop?.rr_store_number ?? // legacy fallback if present
|
|
process.env.RR_STORE_NUMBER;
|
|
|
|
const areaNumber =
|
|
bsCfg?.branchNumber ??
|
|
bsCfg?.areaNumber ?? // accept either key
|
|
bodyshop?.rr_branch_number ?? // legacy fallback if present
|
|
process.env.RR_BRANCH_NUMBER;
|
|
|
|
return {
|
|
baseUrl: requireString(baseUrl, "baseUrl"),
|
|
username: requireString(username, "username"),
|
|
password: requireString(password, "password"),
|
|
routing: {
|
|
dealerNumber: requireString(String(dealerNumber), "routing.dealerNumber"),
|
|
storeNumber: requireString(String(storeNumber), "routing.storeNumber"),
|
|
areaNumber: requireString(String(areaNumber), "routing.areaNumber")
|
|
},
|
|
// timeouts / retries can be adjusted here
|
|
timeoutMs: Number(process.env.RR_TIMEOUT_MS || 30000),
|
|
retries: { max: Number(process.env.RR_RETRIES_MAX || 2) }
|
|
};
|
|
}
|
|
|
|
module.exports = { getRRConfigFromBodyshop };
|