This commit is contained in:
@@ -326,31 +326,49 @@ exports.getExternalEmployeesList = async (req, res) => {
|
||||
timeout: 15000,
|
||||
httpsAgent: HR_INSECURE_HTTPS_AGENT
|
||||
};
|
||||
const currentSite = splitSite.findSiteNumber(req);
|
||||
const requestBodies = [
|
||||
{
|
||||
username: HR_INTEGRATION_USERNAME,
|
||||
password: HR_INTEGRATION_PASSWORD,
|
||||
site: currentSite,
|
||||
status: "active"
|
||||
},
|
||||
{
|
||||
username: HR_INTEGRATION_USERNAME,
|
||||
password: HR_INTEGRATION_PASSWORD,
|
||||
site: currentSite
|
||||
},
|
||||
{
|
||||
username: HR_INTEGRATION_USERNAME,
|
||||
password: HR_INTEGRATION_PASSWORD,
|
||||
status: "active"
|
||||
},
|
||||
{
|
||||
username: HR_INTEGRATION_USERNAME,
|
||||
password: HR_INTEGRATION_PASSWORD
|
||||
}
|
||||
];
|
||||
const requestedSite = Number(req.query?.site || req.body?.site);
|
||||
const hasRequestedSite = Number.isInteger(requestedSite) && requestedSite > 0;
|
||||
const requestBodies = hasRequestedSite
|
||||
? [
|
||||
{
|
||||
username: HR_INTEGRATION_USERNAME,
|
||||
password: HR_INTEGRATION_PASSWORD,
|
||||
site: requestedSite,
|
||||
status: "active"
|
||||
},
|
||||
{
|
||||
username: HR_INTEGRATION_USERNAME,
|
||||
password: HR_INTEGRATION_PASSWORD,
|
||||
site: requestedSite
|
||||
}
|
||||
]
|
||||
: [
|
||||
{
|
||||
username: HR_INTEGRATION_USERNAME,
|
||||
password: HR_INTEGRATION_PASSWORD,
|
||||
status: "active"
|
||||
},
|
||||
{
|
||||
username: HR_INTEGRATION_USERNAME,
|
||||
password: HR_INTEGRATION_PASSWORD
|
||||
}
|
||||
];
|
||||
const normalizeEmployeesList = (raw) => {
|
||||
if (Array.isArray(raw)) return raw;
|
||||
if (typeof raw === "string") {
|
||||
const trimmed = raw.trim();
|
||||
if (!trimmed) return [];
|
||||
try {
|
||||
const parsed = JSON.parse(trimmed);
|
||||
if (Array.isArray(parsed)) return parsed;
|
||||
if (Array.isArray(parsed?.data)) return parsed.data;
|
||||
if (Array.isArray(parsed?.employees)) return parsed.employees;
|
||||
if (Array.isArray(parsed?.result)) return parsed.result;
|
||||
if (Array.isArray(parsed?.results)) return parsed.results;
|
||||
} catch (_err) {
|
||||
return [];
|
||||
}
|
||||
}
|
||||
if (Array.isArray(raw?.data)) return raw.data;
|
||||
if (Array.isArray(raw?.employees)) return raw.employees;
|
||||
if (Array.isArray(raw?.result)) return raw.result;
|
||||
@@ -362,35 +380,19 @@ exports.getExternalEmployeesList = async (req, res) => {
|
||||
let bestResponseData = null;
|
||||
for (const requestBody of requestBodies) {
|
||||
try {
|
||||
console.log("[HR Integration] Requesting employee list from:", HR_EMPLOYEE_LIST_ENDPOINT, "payload:", requestBody);
|
||||
const response = await axios.post(HR_EMPLOYEE_LIST_ENDPOINT, requestBody, requestOptions);
|
||||
const list = normalizeEmployeesList(response?.data);
|
||||
console.log(
|
||||
"[HR Integration] employee list response meta:",
|
||||
{ endpoint: HR_EMPLOYEE_LIST_ENDPOINT, count: list.length, responseType: typeof response?.data }
|
||||
);
|
||||
console.log("[HR Integration] raw employee list response:", response?.data);
|
||||
bestResponseData = response?.data;
|
||||
if (list.length > 0) {
|
||||
return res.send(list);
|
||||
}
|
||||
} catch (attemptError) {
|
||||
console.log("[HR Integration] employee list attempt failed:", {
|
||||
endpoint: HR_EMPLOYEE_LIST_ENDPOINT,
|
||||
payload: requestBody,
|
||||
status: attemptError?.response?.status,
|
||||
data: attemptError?.response?.data,
|
||||
message: attemptError?.message
|
||||
});
|
||||
} catch (_attemptError) {
|
||||
// Try next payload variant.
|
||||
}
|
||||
}
|
||||
const emptyList = normalizeEmployeesList(bestResponseData);
|
||||
console.log("[HR Integration] all attempts completed; returning list length:", emptyList.length);
|
||||
return res.send(emptyList);
|
||||
} catch (err) {
|
||||
console.log("[HR Integration] /employees/list error status:", err?.response?.status);
|
||||
console.log("[HR Integration] /employees/list error data:", err?.response?.data);
|
||||
console.log("[HR Integration] /employees/list error message:", err?.message);
|
||||
res.status(500).send({
|
||||
message: err?.response?.data?.message || err.message || "Failed to fetch employees from HR system."
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user