feature/IO-3357-Reynolds-and-Reynolds-DMS-API-Integration - Enhance logging
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
const RRLogger = require("./rr-logger");
|
||||
const { buildClientAndOpts, rrCombinedSearch } = require("./rr-lookup");
|
||||
const CreateRRLogEvent = require("./rr-logger-event");
|
||||
|
||||
/**
|
||||
* Pick and normalize VIN from inputs
|
||||
@@ -36,7 +36,7 @@ const pickCustNo = ({ selectedCustomerNo, custNo, customerNo }) => {
|
||||
* @returns {Set<any>}
|
||||
*/
|
||||
const ownersFromCombined = (res, wantedVin) => {
|
||||
const blocks = Array.isArray(res?.data) ? res.data : Array.isArray(res) ? res : [];
|
||||
const blocks = Array.isArray(res?.data) ? res.data : [];
|
||||
const owners = new Set();
|
||||
for (const blk of blocks) {
|
||||
const serv = Array.isArray(blk?.ServVehicle) ? blk.ServVehicle : [];
|
||||
@@ -72,7 +72,6 @@ const isAlreadyExistsError = (e) => {
|
||||
* - selectedCustomerNo / custNo / customerNo
|
||||
* - license (optional)
|
||||
* - socket (for logging)
|
||||
* - logNs (namespace for logs)
|
||||
*
|
||||
* Returns: { created:boolean, exists:boolean, vin, customerNo, svId?, status? }
|
||||
*/
|
||||
@@ -87,12 +86,9 @@ const ensureRRServiceVehicle = async (args = {}) => {
|
||||
custNo,
|
||||
customerNo,
|
||||
license,
|
||||
socket,
|
||||
logNs = "rr-service-vehicles"
|
||||
socket
|
||||
} = args;
|
||||
|
||||
const log = RRLogger(socket, { ns: logNs });
|
||||
|
||||
// Build/derive essentials
|
||||
let client = inClient;
|
||||
let routing = inRouting;
|
||||
@@ -116,17 +112,24 @@ const ensureRRServiceVehicle = async (args = {}) => {
|
||||
try {
|
||||
let owners = new Set();
|
||||
if (bodyshop) {
|
||||
const comb = await rrCombinedSearch(bodyshop, { kind: "vin", vin: vinStr, maxResults: 50 });
|
||||
owners = ownersFromCombined(comb, vinStr);
|
||||
const combinedSearchResponse = await rrCombinedSearch(bodyshop, { kind: "vin", vin: vinStr, maxResults: 50 });
|
||||
|
||||
CreateRRLogEvent(socket, "silly", "{SV} Preflight combined search by VIN: raw response", {
|
||||
response: combinedSearchResponse
|
||||
});
|
||||
|
||||
owners = ownersFromCombined(combinedSearchResponse, vinStr);
|
||||
}
|
||||
// Short-circuit: VIN exists anywhere -> don't try to insert
|
||||
if (owners.size > 0) {
|
||||
const ownedBySame = owners.has(custNoStr);
|
||||
log(ownedBySame ? "info" : "warn", "{SV} VIN already present in RR; skipping insert", {
|
||||
|
||||
CreateRRLogEvent(socket, ownedBySame ? "info" : "warn", "{SV} VIN already present in RR; skipping insert", {
|
||||
vin: vinStr,
|
||||
selectedCustomerNo: custNoStr,
|
||||
owners: Array.from(owners)
|
||||
});
|
||||
|
||||
return {
|
||||
created: false,
|
||||
exists: true,
|
||||
@@ -137,7 +140,10 @@ const ensureRRServiceVehicle = async (args = {}) => {
|
||||
}
|
||||
} catch (e) {
|
||||
// Preflight shouldn't be fatal; log and continue to insert (idempotency will still be handled)
|
||||
log("warn", "{SV} VIN preflight lookup failed; continuing to insert", { vin: vinStr, error: e?.message });
|
||||
CreateRRLogEvent(socket, "WARN", "{SV} VIN preflight lookup failed; continuing to insert", {
|
||||
vin: vinStr,
|
||||
error: e?.message
|
||||
});
|
||||
}
|
||||
|
||||
// --- Attempt insert (idempotent) ---
|
||||
@@ -163,30 +169,26 @@ const ensureRRServiceVehicle = async (args = {}) => {
|
||||
}
|
||||
};
|
||||
|
||||
log("debug", "{SV} Inserting service vehicle", {
|
||||
CreateRRLogEvent(socket, "info", "{SV} Inserting service vehicle", {
|
||||
vin: vinStr,
|
||||
selectedCustomerNo: custNoStr,
|
||||
payloadShape: Object.keys(insertPayload).filter((k) => insertPayload[k] != null)
|
||||
});
|
||||
|
||||
// Be tolerant to method name differences
|
||||
const fnName =
|
||||
typeof client.insertServiceVehicle === "function"
|
||||
? "insertServiceVehicle"
|
||||
: typeof client.serviceVehicleInsert === "function"
|
||||
? "serviceVehicleInsert"
|
||||
: null;
|
||||
|
||||
if (!fnName) {
|
||||
throw new Error("RR client does not expose insertServiceVehicle/serviceVehicleInsert");
|
||||
}
|
||||
|
||||
try {
|
||||
const res = await client[fnName](insertPayload, insertOpts);
|
||||
const res = await client.insertServiceVehicle(insertPayload, insertOpts);
|
||||
|
||||
CreateRRLogEvent(socket, "silly", "{SV} insertServiceVehicle: raw response", { res });
|
||||
|
||||
const data = res?.data ?? {};
|
||||
const svId = data?.dmsRecKey || data?.svId || undefined;
|
||||
|
||||
log("info", "{SV} insertServiceVehicle: success", { vin: vinStr, customerNo: custNoStr, svId });
|
||||
CreateRRLogEvent(socket, "info", "{SV} insertServiceVehicle: success", {
|
||||
vin: vinStr,
|
||||
customerNo: custNoStr,
|
||||
svId
|
||||
});
|
||||
|
||||
return {
|
||||
created: true,
|
||||
exists: false,
|
||||
@@ -198,12 +200,13 @@ const ensureRRServiceVehicle = async (args = {}) => {
|
||||
} catch (e) {
|
||||
if (isAlreadyExistsError(e)) {
|
||||
// Treat as idempotent success
|
||||
log("warn", "{SV} insertServiceVehicle: already exists; treating as success", {
|
||||
CreateRRLogEvent(socket, "warn", "{SV} insertServiceVehicle: already exists; treating as success", {
|
||||
vin: vinStr,
|
||||
customerNo: custNoStr,
|
||||
code: e?.code,
|
||||
status: e?.meta?.status || e?.status
|
||||
});
|
||||
|
||||
return {
|
||||
created: false,
|
||||
exists: true,
|
||||
@@ -212,11 +215,13 @@ const ensureRRServiceVehicle = async (args = {}) => {
|
||||
status: e?.meta?.status || e?.status
|
||||
};
|
||||
}
|
||||
log("error", "{SV} insertServiceVehicle: failure", {
|
||||
|
||||
CreateRRLogEvent(socket, "error", "{SV} insertServiceVehicle: failure", {
|
||||
message: e?.message,
|
||||
code: e?.code,
|
||||
status: e?.meta?.status || e?.status
|
||||
});
|
||||
|
||||
throw e;
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user