diff --git a/elevate-user/controllers/user.js b/elevate-user/controllers/user.js index a1a0c5ec..0d77b597 100644 --- a/elevate-user/controllers/user.js +++ b/elevate-user/controllers/user.js @@ -1,11 +1,11 @@ const routeConfigs = require('../constants/routes') const requesters = require('../utils/requester') const requestParser = require('../utils/requestParser') -const {convertIdsToString} = require('../utils/integerToStringConverter') +const { convertIdsToString } = require('../utils/integerToStringConverter') const createUser = async (req, res, responses) => { const selectedConfig = routeConfigs.routes.find((obj) => obj.sourceRoute === req.sourceRoute) - return await requesters.post(req.baseUrl, selectedConfig.targetRoute.path, req.body,{ + return await requesters.post(req.baseUrl, selectedConfig.targetRoute.path, req.body, { 'device-info': req.headers['device-info'], }) } @@ -25,7 +25,7 @@ const entityTypeRead = async (req, res, responses) => { const loginUser = async (req, res, responses) => { const selectedConfig = routeConfigs.routes.find((obj) => obj.sourceRoute === req.sourceRoute) - return await requesters.post(req.baseUrl, selectedConfig.targetRoute.path, req.body,{ + return await requesters.post(req.baseUrl, selectedConfig.targetRoute.path, req.body, { 'captcha-token': req.headers['captcha-token'], 'device-info': req.headers['device-info'], }) @@ -33,12 +33,14 @@ const loginUser = async (req, res, responses) => { const readOrganization = async (req, res, selectedConfig) => { try { - const parameterisedRoute = req.query.organisation_code ? selectedConfig.targetRoute.path + `?organisation_code=${req.query.organisation_code}` : selectedConfig.targetRoute.path + `?organisation_id=${req.query.organisation_id}` - let response = await requesters.get(req.baseUrl, parameterisedRoute , { - 'internal_access_token': req.headers['internal_access_token'], - 'Content-Type':'application/json' + const parameterisedRoute = req.query.organisation_code + ? selectedConfig.targetRoute.path + `?organisation_code=${req.query.organisation_code}` + : selectedConfig.targetRoute.path + `?organisation_id=${req.query.organisation_id}` + let response = await requesters.get(req.baseUrl, parameterisedRoute, { + internal_access_token: req.headers['internal_access_token'], + 'Content-Type': 'application/json', }) - response.result = convertIdsToString(response.result) + response.result = convertIdsToString(response.result) return res.json(response) } catch (error) { console.error('Error fetching organization details:', error) @@ -48,72 +50,75 @@ const readOrganization = async (req, res, selectedConfig) => { const readUser = async (req, res, selectedConfig) => { try { - const parameterisedRoute = req.params.id ? selectedConfig.targetRoute.path.replace('/:id', `/${req.params.id}`) : selectedConfig.targetRoute.path; - let headers - - if (req.params.id) { - headers = { - 'internal_access_token': req.headers['internal_access_token'], - 'Content-Type': 'application/json', - } - } else { - headers = { - 'X-auth-token': req.headers['x-auth-token'], - 'Content-Type': 'application/json', + const parameterisedRoute = req.params.id + ? selectedConfig.targetRoute.path.replace('/:id', `/${req.params.id}`) + : selectedConfig.targetRoute.path + let headers + + if (req.params.id) { + headers = { + internal_access_token: req.headers['internal_access_token'], + 'Content-Type': 'application/json', + } + } else { + headers = { + 'X-auth-token': req.headers['x-auth-token'], + 'Content-Type': 'application/json', + } } - } - - let response = await requesters.get(req.baseUrl, parameterisedRoute, headers) - - // Extract only the relevant data - response.result = convertIdsToString(response.result) - return res.json(response) + + let response = await requesters.get(req.baseUrl, parameterisedRoute, headers) + + // Extract only the relevant data + response.result = convertIdsToString(response.result) + return res.json(response) } catch (error) { - console.error('Error fetching user details:', error); - return res.status(500).json({ error: 'Internal Server Error' }) + console.error('Error fetching user details:', error) + return res.status(500).json({ error: 'Internal Server Error' }) } - }; - +} - const accountsList = async (req, res, selectedConfig) => { +const accountsList = async (req, res, selectedConfig) => { try { - const userIds = req.body.userIds // Extract userIds from the request body - const excludeDeletedRecords = req.query.exclude_deleted_records === 'true' - - const parameterisedRoute = excludeDeletedRecords - ? `${selectedConfig.targetRoute.path}?exclude_deleted_records=true` - : selectedConfig.targetRoute.path - const headers = { - 'internal_access_token': req.headers['internal_access_token'], + internal_access_token: req.headers['internal_access_token'], 'Content-Type': 'application/json', } - const requestBody = { userIds } // Pass the request body - const accountsListResponse = await requesters.get(req.baseUrl, parameterisedRoute, headers, requestBody) + const accountsListResponse = await requesters.get( + req.baseUrl, + selectedConfig.targetRoute.path, + headers, + req.body, + req.query + ) accountsListResponse.result = await convertIdsToString(accountsListResponse.result) return res.json(accountsListResponse) } catch (error) { - console.error('Error fetching list of user details:', error); - return res.status(500).json({ error: 'Internal Server Error' }); + console.error('Error fetching list of user details:', error) + return res.status(500).json({ error: 'Internal Server Error' }) } } +const validateEmails = async (req, res, selectedConfig) => { + try { + const emailIds = req.body.emailIds -const validateEmails = async (req, res , selectedConfig) => { - try{ - const emailIds = req.body.emailIds - const headers = { - 'internal_access_token': req.headers['internal_access_token'], + internal_access_token: req.headers['internal_access_token'], 'Content-Type': 'application/json', } const requestBody = { emailIds } // Pass the request body - const userListResponse = await requesters.post(req.baseUrl, selectedConfig.targetRoute.path, requestBody, headers) + const userListResponse = await requesters.post( + req.baseUrl, + selectedConfig.targetRoute.path, + requestBody, + headers + ) userListResponse.result = await convertIdsToString(userListResponse.result) return res.json(userListResponse) } catch (error) { @@ -130,7 +135,7 @@ const userController = { readOrganization, readUser, accountsList, - validateEmails + validateEmails, } module.exports = userController diff --git a/elevate-user/utils/integerToStringConverter.js b/elevate-user/utils/integerToStringConverter.js index 448d6d08..1dbbbf25 100644 --- a/elevate-user/utils/integerToStringConverter.js +++ b/elevate-user/utils/integerToStringConverter.js @@ -1,37 +1,28 @@ -const convertIdsToString = (obj) => { - // Check if the input is an array of integers - if (Array.isArray(obj) && obj.every(item => typeof item === 'number')) { - return obj.map(item => item.toString()) - } +const convertIdsToString = (json) => { + // if its not an object or is null, return it as is + if (typeof json !== 'object' || json === null) { + return json + } - // If not an array or not all elements are numbers, proceed with the existing logic - if (typeof obj !== 'object' || obj === null) { - return obj - } + // if its an array, recursively transform each element + if (Array.isArray(json)) { + return json.map((item) => convertIdsToString(item)) + } - if (Array.isArray(obj)) { - return obj.map(convertIdsToString) - } + // if its an object, recursively transform each property + const transformed = {} + for (const key in json) { + if (Object.prototype.hasOwnProperty.call(json, key)) { + if (key === 'id' || key === 'organization_id' || key === 'related_orgs') { + // convert id, organization_id, or related_orgs to string if they are integers + transformed[key] = typeof json[key] === 'number' ? json[key].toString() : json[key] + } else { + // recursively transform nested objects or arrays + transformed[key] = convertIdsToString(json[key]) + } + } + } + return transformed +} - const relevantKeys = ['id', 'organization_id', 'related_orgs'] - const hasRelevantKeys = relevantKeys.some(key => key in obj) - - if (!hasRelevantKeys) { - return obj - } - - return Object.keys(obj).reduce((result, key) => { - if (relevantKeys.includes(key)) { - if (key === 'related_orgs' && Array.isArray(obj[key])) { - result[key] = obj[key].map(item => typeof item === 'number' ? item.toString() : item) - } else { - result[key] = typeof obj[key] === 'number' ? obj[key].toString() : obj[key] - } - } else { - result[key] = convertIdsToString(obj[key]) - } - return result - }, {}) -}; - -exports.convertIdsToString = convertIdsToString \ No newline at end of file +exports.convertIdsToString = convertIdsToString diff --git a/elevate-user/utils/requester.js b/elevate-user/utils/requester.js index 32011885..19873102 100644 --- a/elevate-user/utils/requester.js +++ b/elevate-user/utils/requester.js @@ -90,12 +90,13 @@ const patch = async (baseUrl, route, requestBody, headers) => { } } -const get = (baseUrl, route, headers, requestBody = {}) => { +const get = (baseUrl, route, headers, requestBody = {}, queryParams = {}) => { const url = baseUrl + route const options = { headers, - data: requestBody - }; + data: requestBody, + params: queryParams, + } return axios .post(url, requestBody, options) // Use POST to send body data @@ -113,7 +114,7 @@ const requesters = { passThroughRequester, post, patch, - get + get, } module.exports = requesters