Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 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
10 changes: 5 additions & 5 deletions api/src/controllers/projects.contentMapper.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import { contentMapperService } from "../services/contentMapper.service.js";
*/
const putTestData = async (req: Request, res: Response): Promise<void> => {
const resp = await contentMapperService.putTestData(req);
res.status(200).json(resp);
res.status(resp?.status).json(resp);
};

/**
Expand All @@ -21,7 +21,7 @@ const putTestData = async (req: Request, res: Response): Promise<void> => {
*/
const getContentTypes = async (req: Request, res: Response): Promise<void> => {
const resp = await contentMapperService.getContentTypes(req);
res.status(200).json(resp);
res.status(resp?.status).json(resp);
};
/**
* Retrieves the field mapping for a given request and sends the response as JSON.
Expand All @@ -32,7 +32,7 @@ const getContentTypes = async (req: Request, res: Response): Promise<void> => {
*/
const getFieldMapping = async (req: Request, res: Response): Promise<void> => {
const resp = await contentMapperService.getFieldMapping(req);
res.status(200).json(resp);
res.status(resp?.status).json(resp);
};
/**
* Retrieves the existing content types.
Expand Down Expand Up @@ -76,7 +76,7 @@ const putContentTypeFields = async (
res: Response
): Promise<void> => {
const resp = await contentMapperService.updateContentType(req);
res.status(200).json(resp);
res.status(resp?.status).json(resp);
};
/**
* Resets the content type to its initial mapping.
Expand All @@ -87,7 +87,7 @@ const putContentTypeFields = async (
*/
const resetContentType = async (req: Request, res: Response): Promise<void> => {
const resp = await contentMapperService.resetToInitialMapping(req);
res.status(200).json(resp);
res.status(resp?.status).json(resp);
};
// TODO Will remove if not required
// const removeMapping = async (req: Request, res: Response): Promise<void> => {
Expand Down
214 changes: 138 additions & 76 deletions api/src/services/contentMapper.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@ const putTestData = async (req: Request) => {
const projectId = req.params.projectId;
const contentTypes = req.body.contentTypes;


await FieldMapperModel.read();
try {
await FieldMapperModel.read();

/*
this code snippet iterates over an array of contentTypes and performs
Expand Down Expand Up @@ -93,7 +93,7 @@ const putTestData = async (req: Request) => {
if (index > -1 && contentIds?.length) {
ProjectModelLowdb.data.projects[index].content_mapper = contentIds;
ProjectModelLowdb.data.projects[index].extract_path = req?.body?.extractPath;
ProjectModelLowdb.write();
await ProjectModelLowdb.write();
} else {
throw new BadRequestError(HTTP_TEXTS.CONTENT_TYPE_NOT_FOUND);
}
Expand All @@ -102,8 +102,21 @@ const putTestData = async (req: Request) => {
.get("projects")
.find({ id: projectId })
.value();

return {
status: HTTP_CODES?.OK,
data: pData
}

} catch (error:any) {

return pData;
throw new ExceptionFunction(
error?.message || HTTP_TEXTS.INTERNAL_ERROR,
error?.statusCode || error?.status || HTTP_CODES.SERVER_ERROR
);

}

};

/**
Expand All @@ -120,57 +133,80 @@ const getContentTypes = async (req: Request) => {

let result: any = [];
let totalCount = 0;

await ProjectModelLowdb.read();
const projectDetails = ProjectModelLowdb.chain
try {
await ProjectModelLowdb.read();
const projectDetails = ProjectModelLowdb.chain
.get("projects")
.find({ id: projectId })
.value();

if (isEmpty(projectDetails)) {
logger.error(
if (isEmpty(projectDetails)) {
logger.error(
getLogMessage(
sourceFn,
`${HTTP_TEXTS.PROJECT_NOT_FOUND} projectId: ${projectId}`
)
);
throw new BadRequestError(HTTP_TEXTS.PROJECT_NOT_FOUND);
}
const contentMapperId = projectDetails.content_mapper;
await ContentTypesMapperModelLowdb.read();
await FieldMapperModel.read();

const content_mapper: any = [];
contentMapperId.map((data: any) => {
const contentMapperData = ContentTypesMapperModelLowdb.chain
.get("ContentTypesMappers")
.find({ id: data, projectId: projectId })
.value();
content_mapper.push(contentMapperData);
});

if (!isEmpty(content_mapper)) {
if (search) {
const filteredResult = content_mapper
.filter((item: any) =>
item?.otherCmsTitle?.toLowerCase().includes(search)
)
?.sort((a: any, b: any) =>
a.otherCmsTitle.localeCompare(b.otherCmsTitle)
);
totalCount = filteredResult.length;
result = filteredResult.slice(skip, Number(skip) + Number(limit));
} else {
totalCount = content_mapper.length;
result = content_mapper
?.sort((a: any, b: any) =>
a.otherCmsTitle.localeCompare(b.otherCmsTitle)
)
?.slice(skip, Number(skip) + Number(limit));
}
}

return {
status: HTTP_CODES?.OK,
count: totalCount,
contentTypes: result
};

} catch (error:any) {
// Log error message
logger.error(
getLogMessage(
sourceFn,
`${HTTP_TEXTS.PROJECT_NOT_FOUND} projectId: ${projectId}`
"Error occurred while while getting contentTypes of projects",
error
)
);
throw new BadRequestError(HTTP_TEXTS.PROJECT_NOT_FOUND);
}
const contentMapperId = projectDetails.content_mapper;
await ContentTypesMapperModelLowdb.read();
await FieldMapperModel.read();

const content_mapper: any = [];
contentMapperId.map((data: any) => {
const contentMapperData = ContentTypesMapperModelLowdb.chain
.get("ContentTypesMappers")
.find({ id: data, projectId: projectId })
.value();
content_mapper.push(contentMapperData);
});

if (!isEmpty(content_mapper)) {
if (search) {
const filteredResult = content_mapper
.filter((item: any) =>
item?.otherCmsTitle?.toLowerCase().includes(search)
)
?.sort((a: any, b: any) =>
a.otherCmsTitle.localeCompare(b.otherCmsTitle)
);
totalCount = filteredResult.length;
result = filteredResult.slice(skip, Number(skip) + Number(limit));
} else {
totalCount = content_mapper.length;
result = content_mapper
?.sort((a: any, b: any) =>
a.otherCmsTitle.localeCompare(b.otherCmsTitle)
)
?.slice(skip, Number(skip) + Number(limit));
}
throw new ExceptionFunction(
error?.message || HTTP_TEXTS.INTERNAL_ERROR,
error?.statusCode || error?.status || HTTP_CODES.SERVER_ERROR
);

}

return { count: totalCount, contentTypes: result };

};

/**
Expand All @@ -191,46 +227,68 @@ const getFieldMapping = async (req: Request) => {
let filteredResult = [];
let totalCount = 0;

await ContentTypesMapperModelLowdb.read();
try {
await ContentTypesMapperModelLowdb.read();

const contentType = ContentTypesMapperModelLowdb.chain
.get("ContentTypesMappers")
.find({ id: contentTypeId, projectId: projectId })
.value();
const contentType = ContentTypesMapperModelLowdb.chain
.get("ContentTypesMappers")
.find({ id: contentTypeId, projectId: projectId })
.value();

if (isEmpty(contentType)) {
logger.error(
getLogMessage(
srcFunc,
`${HTTP_TEXTS.CONTENT_TYPE_NOT_FOUND} Id: ${contentTypeId}`
)
);
throw new BadRequestError(HTTP_TEXTS.CONTENT_TYPE_NOT_FOUND);
}
await FieldMapperModel.read();
const fieldData = contentType?.fieldMapping?.map?.((fields: any) => {
const fieldMapper = FieldMapperModel.chain
.get("field_mapper")
.find({ id: fields, projectId: projectId })
.value();

return fieldMapper;
});
const fieldMapping: any = fieldData;
if (!isEmpty(fieldMapping)) {
if (search) {
filteredResult = fieldMapping?.filter?.((item: any) =>
item?.otherCmsField?.toLowerCase().includes(search)
);
totalCount = filteredResult.length;
result = filteredResult.slice(skip, Number(skip) + Number(limit));
} else {
totalCount = fieldMapping.length;
result = fieldMapping.slice(skip, Number(skip) + Number(limit));
}
}

if (isEmpty(contentType)) {
return {
status: HTTP_CODES?.OK,
count: totalCount,
fieldMapping: result };

} catch (error: any) {
// Log error message
logger.error(
getLogMessage(
srcFunc,
`${HTTP_TEXTS.CONTENT_TYPE_NOT_FOUND} Id: ${contentTypeId}`
"Error occurred while while getting field mapping of projects",
Copy link

Copilot AI Apr 2, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The error log message contains a duplicate 'while'. Removing one occurrence would improve clarity.

Suggested change
"Error occurred while while getting field mapping of projects",
"Error occurred while getting field mapping of projects",

Copilot uses AI. Check for mistakes.
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

resolved the comments

error
)
);
throw new BadRequestError(HTTP_TEXTS.CONTENT_TYPE_NOT_FOUND);
}
await FieldMapperModel.read();
const fieldData = contentType?.fieldMapping?.map?.((fields: any) => {
const fieldMapper = FieldMapperModel.chain
.get("field_mapper")
.find({ id: fields, projectId: projectId })
.value();

return fieldMapper;
});
const fieldMapping: any = fieldData;
if (!isEmpty(fieldMapping)) {
if (search) {
filteredResult = fieldMapping?.filter?.((item: any) =>
item?.otherCmsField?.toLowerCase().includes(search)
);
totalCount = filteredResult.length;
result = filteredResult.slice(skip, Number(skip) + Number(limit));
} else {
totalCount = fieldMapping.length;
result = fieldMapping.slice(skip, Number(skip) + Number(limit));
}
throw new ExceptionFunction(
error?.message || HTTP_TEXTS.INTERNAL_ERROR,
error?.statusCode || error?.status || HTTP_CODES.SERVER_ERROR
);

}

return { count: totalCount, fieldMapping: result };

};

/**
Expand Down Expand Up @@ -705,7 +763,11 @@ const resetToInitialMapping = async (req: Request) => {
await ContentTypesMapperModelLowdb.update((data: any) => {
data.ContentTypesMappers[contentIndex].status = CONTENT_TYPE_STATUS[1];
});
return { message: HTTP_TEXTS.RESET_CONTENT_MAPPING, data: contentTypeData };
return {
status: HTTP_CODES?.OK,
message: HTTP_TEXTS.RESET_CONTENT_MAPPING,
data: contentTypeData
};

} catch (error: any) {
logger.error(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -217,6 +217,13 @@ const Mapper = ({

const updatedOptions = { ...prevOptions }; // Create a shallow copy
csLocale = updatedOptions[index]?.label;
setselectedCsOption((prevSelected) => {
const newSelectedOptions: string[] = prevSelected?.filter(
(item) => item !== csLocale // Remove the item equal to csLocale
);
return newSelectedOptions;
});

delete updatedOptions[index]; // Remove the key

return updatedOptions;
Expand All @@ -226,7 +233,14 @@ const Mapper = ({
// Remove item at index from existingLocale
setexistingLocale((prevLocales: ExistingFieldType) => {
if (!prevLocales) return {};
const updatedOptions = { ...prevLocales }; // Create a shallow copy
const updatedOptions = { ...prevLocales }; // Create a shallow copy;
const locale = updatedOptions[index]?.label
setselectedSourceOption((prevSelected) => {
const newSelectedOptions: string[] = prevSelected?.filter(
(item) => item !== locale // Remove the item equal to csLocale
);
return newSelectedOptions;
});
delete updatedOptions[index]; // Remove the key
return updatedOptions;
});
Expand Down
6 changes: 4 additions & 2 deletions upload-api/src/controllers/sitecore/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -77,8 +77,10 @@ const createSitecoreMapper = async (filePath: string = "", projectId: string | s
},
data: JSON.stringify(fieldMapping),
};
const response = await axios?.request?.(config)
if (response?.data?.content_mapper?.length) {

const {data, status} = await axios.request(config);

if (data?.data?.content_mapper?.length) {
deleteFolderSync(infoMap?.path);
logger.info('Validation success:', {
status: HTTP_CODES?.OK,
Expand Down
9 changes: 8 additions & 1 deletion upload-api/src/controllers/wordpress/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,14 @@ const createWordpressMapper = async (filePath: string = "", projectId: string |
},
data: JSON.stringify(fieldMapping),
};
const response = await axios.request(config)
const {data, status} = await axios.request(config);
if (data?.data?.content_mapper?.length) {
logger.info('Validation success:', {
status: HTTP_CODES?.OK,
message: HTTP_TEXTS?.MAPPER_SAVED,
});
}


const mapperConfig = {
method: 'post',
Expand Down
4 changes: 2 additions & 2 deletions upload-api/src/services/contentful/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@ const createContentfulMapper = async (
},
data: JSON.stringify(initialMapper)
};
const response = await axios.request(req);
if (response?.data?.content_mapper?.length) {
const {data, status} = await axios.request(req);
if (data?.data?.content_mapper?.length) {
logger.info('Validation success:', {
status: HTTP_CODES?.OK,
message: HTTP_TEXTS?.MAPPER_SAVED
Expand Down