Skip to content
Merged
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
29 changes: 26 additions & 3 deletions src/controllers/v1/entities.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
const entitiesHelper = require(MODULES_BASE_PATH + '/entities/helper')
const csv = require('csvtojson')
const FileStream = require(PROJECT_ROOT_DIRECTORY + '/generics/file-stream')
const entitiesQueries = require(DB_QUERY_BASE_PATH + '/entities')

/**
* entities
Expand Down Expand Up @@ -116,11 +117,33 @@ module.exports = class Entities extends Abstract {
return new Promise(async (resolve, reject) => {
try {
let result = {}
let projection = [
'metaInformation.externalId',
'metaInformation.name',
'metaInformation.addressLine1',
'metaInformation.addressLine2',
'metaInformation.administration',
'metaInformation.city',
'metaInformation.country',
'entityTypeId',
'entityType',
]
let entityDocument = await entitiesQueries.entityDocuments({ _id: req.params._id }, projection)

// Retrieve related entities using 'entitiesHelper.relatedEntities'
let relatedEntities = await entitiesHelper.relatedEntities(req.params._id)
if (entityDocument.length < 1) {
throw {
status: HTTP_STATUS_CODE.not_found.status,
message: CONSTANTS.apiResponses.ENTITY_NOT_FOUND,
}
}

// Store the retrieved relatedEntities in the 'result' object
let relatedEntities = await entitiesHelper.relatedEntities(
entityDocument[0]._id,
entityDocument[0].entityTypeId,
entityDocument[0].entityType,
projection
)
_.merge(result, entityDocument[0])
result['relatedEntities'] = relatedEntities.length > 0 ? relatedEntities : []

return resolve({
Expand Down
45 changes: 3 additions & 42 deletions src/module/entities/helper.js
Original file line number Diff line number Diff line change
Expand Up @@ -718,40 +718,9 @@ module.exports = class UserProjectsHelper {
* @returns {Array} - returns an array of related entities data.
*/

static relatedEntities(reqId) {
static relatedEntities(entityId, entityTypeId, entityType, projection = 'all') {
return new Promise(async (resolve, reject) => {
try {
// Define projection fields to retrieve from the entity document
let projection = [
'metaInformation.externalId',
'metaInformation.name',
'metaInformation.addressLine1',
'metaInformation.addressLine2',
'metaInformation.administration',
'metaInformation.city',
'metaInformation.country',
'entityTypeId',
'entityType',
]

// Retrieve entity document based on the provided request ID (reqId)
let entityDocument = await entitiesQueries.entityDocuments({ _id: reqId }, projection)
if (entityDocument.length < 1) {
throw {
status: HTTP_STATUS_CODE.not_found.status,
message: CONSTANTS.apiResponses.ENTITY_NOT_FOUND,
}
}

// Extract relevant information from the retrieved entity document
let entityId = entityDocument[0]._id
let entityTypeId = entityDocument[0].entityTypeId
let entityType = entityDocument[0].entityType
// this.entityMapProcessData = {
// entityTypeMap : {},
// relatedEntities : {},
// entityToUpdate : {}
// }
// if (
// this.entityMapProcessData &&
// this.entityMapProcessData.relatedEntities &&
Expand All @@ -764,6 +733,7 @@ module.exports = class UserProjectsHelper {
let relatedEntitiesQuery = {}

if (entityTypeId && entityId && entityType) {
relatedEntitiesQuery[`groups.${entityType}`] = entityId
relatedEntitiesQuery['entityTypeId'] = {}
relatedEntitiesQuery['entityTypeId']['$ne'] = entityTypeId
} else {
Expand All @@ -772,7 +742,6 @@ module.exports = class UserProjectsHelper {
message: CONSTANTS.apiResponses.MISSING_ENTITYID,
}
}

// Retrieve related entities matching the query criteria
let relatedEntitiesDocument = await entitiesQueries.entityDocuments(relatedEntitiesQuery, projection)
relatedEntitiesDocument = relatedEntitiesDocument ? relatedEntitiesDocument : []
Expand Down Expand Up @@ -1037,15 +1006,7 @@ module.exports = class UserProjectsHelper {

for (let pointer = 0; pointer < dataArray.length; pointer++) {
let singleEntity = dataArray[pointer]
// Check if an entity with the same name exists in the database
let existingEntity = await entitiesQueries.findOne({ 'metaInformation.name': singleEntity.name })
if (existingEntity) {
// Throw 400 error if the name already exists
return reject({
status: HTTP_STATUS_CODE.bad_request.status,
message: `Entity with name '${singleEntity.name}' already exists.`,
})
}

if (singleEntity.createdByProgramId) {
singleEntity.createdByProgramId = ObjectId(singleEntity.createdByProgramId)
}
Expand Down