diff --git a/api/src/controllers/projects.contentMapper.controller.ts b/api/src/controllers/projects.contentMapper.controller.ts index 03881ff8f..af49095fa 100644 --- a/api/src/controllers/projects.contentMapper.controller.ts +++ b/api/src/controllers/projects.contentMapper.controller.ts @@ -9,7 +9,7 @@ import { contentMapperService } from "../services/contentMapper.service.js"; */ const putTestData = async (req: Request, res: Response): Promise => { const resp = await contentMapperService.putTestData(req); - res.status(200).json(resp); + res.status(resp?.status).json(resp); }; /** @@ -21,7 +21,7 @@ const putTestData = async (req: Request, res: Response): Promise => { */ const getContentTypes = async (req: Request, res: Response): Promise => { 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. @@ -32,7 +32,7 @@ const getContentTypes = async (req: Request, res: Response): Promise => { */ const getFieldMapping = async (req: Request, res: Response): Promise => { const resp = await contentMapperService.getFieldMapping(req); - res.status(200).json(resp); + res.status(resp?.status).json(resp); }; /** * Retrieves the existing content types. @@ -76,7 +76,7 @@ const putContentTypeFields = async ( res: Response ): Promise => { 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. @@ -87,7 +87,7 @@ const putContentTypeFields = async ( */ const resetContentType = async (req: Request, res: Response): Promise => { 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 => { diff --git a/api/src/services/contentMapper.service.ts b/api/src/services/contentMapper.service.ts index 2af4c371d..eb4b3d5f8 100644 --- a/api/src/services/contentMapper.service.ts +++ b/api/src/services/contentMapper.service.ts @@ -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 @@ -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); } @@ -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 + ); + + } + }; /** @@ -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 }; + }; /** @@ -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 getting field mapping of projects", + 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 }; + }; /** @@ -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( diff --git a/ui/src/components/DestinationStack/Actions/LoadLanguageMapper.tsx b/ui/src/components/DestinationStack/Actions/LoadLanguageMapper.tsx index 29fe04bfe..8fea8fceb 100644 --- a/ui/src/components/DestinationStack/Actions/LoadLanguageMapper.tsx +++ b/ui/src/components/DestinationStack/Actions/LoadLanguageMapper.tsx @@ -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; @@ -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 locale + ); + return newSelectedOptions; + }); delete updatedOptions[index]; // Remove the key return updatedOptions; }); diff --git a/upload-api/src/controllers/sitecore/index.ts b/upload-api/src/controllers/sitecore/index.ts index 0d01ae7f7..6811c33c4 100644 --- a/upload-api/src/controllers/sitecore/index.ts +++ b/upload-api/src/controllers/sitecore/index.ts @@ -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, diff --git a/upload-api/src/controllers/wordpress/index.ts b/upload-api/src/controllers/wordpress/index.ts index bdb388b16..f07b929c1 100644 --- a/upload-api/src/controllers/wordpress/index.ts +++ b/upload-api/src/controllers/wordpress/index.ts @@ -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', diff --git a/upload-api/src/services/contentful/index.ts b/upload-api/src/services/contentful/index.ts index f578eec28..e3e1b3075 100644 --- a/upload-api/src/services/contentful/index.ts +++ b/upload-api/src/services/contentful/index.ts @@ -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