Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
107 changes: 56 additions & 51 deletions elevate-user/controllers/user.js
Original file line number Diff line number Diff line change
@@ -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'],
})
}
Expand All @@ -25,20 +25,22 @@ 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'],
})
}

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)
Expand All @@ -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) {
Expand All @@ -130,7 +135,7 @@ const userController = {
readOrganization,
readUser,
accountsList,
validateEmails
validateEmails,
}

module.exports = userController
59 changes: 25 additions & 34 deletions elevate-user/utils/integerToStringConverter.js
Original file line number Diff line number Diff line change
@@ -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
exports.convertIdsToString = convertIdsToString
9 changes: 5 additions & 4 deletions elevate-user/utils/requester.js
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -113,7 +114,7 @@ const requesters = {
passThroughRequester,
post,
patch,
get
get,
}

module.exports = requesters