Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
8 changes: 4 additions & 4 deletions api/src/services/migration.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -230,8 +230,8 @@ const startTestMigration = async (req: Request): Promise<any> => {
case CMS.SITECORE_V9:
case CMS.SITECORE_V10: {
if (packagePath) {
await siteCoreService?.createEntry({ packagePath, contentTypes, master_locale: project?.stackDetails?.master_locale, destinationStackId: project?.current_test_stack_id, projectId, keyMapper: project?.mapperKeys });
await siteCoreService?.createLocale(req, project?.current_test_stack_id, projectId);
await siteCoreService?.createEntry({ packagePath, contentTypes, master_locale: project?.stackDetails?.master_locale, destinationStackId: project?.current_test_stack_id, projectId, keyMapper: project?.mapperKey, project });
await siteCoreService?.createLocale(req, project?.current_test_stack_id, projectId, project);
await siteCoreService?.createVersionFile(project?.current_test_stack_id);
}
break;
Expand Down Expand Up @@ -306,8 +306,8 @@ const startMigration = async (req: Request): Promise<any> => {
case CMS.SITECORE_V9:
case CMS.SITECORE_V10: {
if (packagePath) {
await siteCoreService?.createEntry({ packagePath, contentTypes, master_locale: project?.stackDetails?.master_locale, destinationStackId: project?.destination_stack_id, projectId, keyMapper: project?.mapperKeys });
await siteCoreService?.createLocale(req, project?.destination_stack_id, projectId);
await siteCoreService?.createEntry({ packagePath, contentTypes, master_locale: project?.stackDetails?.master_locale, destinationStackId: project?.destination_stack_id, projectId, keyMapper: project?.mapperKeys, project });
await siteCoreService?.createLocale(req, project?.destination_stack_id, projectId, project);
await siteCoreService?.createVersionFile(project?.destination_stack_id);
}
break;
Expand Down
112 changes: 63 additions & 49 deletions api/src/services/sitecore.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,18 @@ const AssetsPathSpliter = ({ path, id }: any) => {
return newPath;
}

const mapLocales = ({ masterLocale, locale, locales }: any) => {
if (locales?.masterLocale?.[masterLocale ?? ''] === locale) {
return Object?.keys(locales?.masterLocale)?.[0]
}
for (const [key, value] of Object?.entries?.(locales) ?? {}) {
if (typeof value !== 'object' && value === locale) {
return key;
}
}
return locale.toLowerCase();
}



async function writeOneFile(indexPath: string, fileMeta: any) {
Expand Down Expand Up @@ -197,7 +209,7 @@ const cretaeAssets = async ({ packagePath, baseDir, destinationStackId, projectI
return allAssetJSON;
}

const createEntry = async ({ packagePath, contentTypes, master_locale, destinationStackId, projectId, keyMapper }: { packagePath: any; contentTypes: any; master_locale?: string, destinationStackId: string, projectId: string, keyMapper: any }) => {
const createEntry = async ({ packagePath, contentTypes, master_locale, destinationStackId, projectId, keyMapper, project }: { packagePath: any; contentTypes: any; master_locale?: string, destinationStackId: string, projectId: string, keyMapper: any, project: any }) => {
try {
const srcFunc = 'createEntry';
const baseDir = path.join(baseDirName, destinationStackId);
Expand All @@ -218,7 +230,11 @@ const createEntry = async ({ packagePath, contentTypes, master_locale, destinati
const templateIndex = entriesData?.findIndex((ele: any) => ele?.template === template);
if (templateIndex >= 0) {
const entry = entriesData?.[templateIndex]?.locale?.[language];
entry[id] = { meta: jsonData?.item?.$, fields: jsonData?.item?.fields };
if (entry !== undefined) {
entry[id] = { meta: jsonData?.item?.$, fields: jsonData?.item?.fields };
} else {
entriesData[templateIndex].locale[language] = entries;
}
} else {
const locale: any = {};
locale[language] = entries;
Expand All @@ -230,61 +246,59 @@ const createEntry = async ({ packagePath, contentTypes, master_locale, destinati
for await (const ctType of contentTypes) {
const message = getLogMessage(
srcFunc,
`Transforming entries of Content Type ${keyMapper[ctType?.contentstackUid] ?? ctType?.contentstackUid} has begun.`,
`Transforming entries of Content Type ${keyMapper?.[ctType?.contentstackUid] ?? ctType?.contentstackUid} has begun.`,
{}
)
await customLogger(projectId, destinationStackId, 'info', message);
const entryPresent: any = entriesData?.find((item: any) => uidCorrector({ uid: item?.template }) === ctType?.contentstackUid)
if (entryPresent) {
const locales: any = Object?.keys(entryPresent?.locale);
const allLocales: any = { masterLocale: project?.master_locale ?? LOCALE_MAPPER?.masterLocale, ...project?.locales ?? {} }
for await (const locale of locales) {
let newLocale = locale;
const newLocale = mapLocales({ masterLocale: master_locale, locale, locales: allLocales });
const entryLocale: any = {};
if (typeof LOCALE_MAPPER?.masterLocale === 'object' && LOCALE_MAPPER?.masterLocale !== null && LOCALE_MAPPER?.masterLocale?.[master_locale ?? ''] === locale) {
newLocale = Object?.keys(LOCALE_MAPPER?.masterLocale)?.[0];
Object.entries(entryPresent?.locale?.[locale] || {}).map(async ([uid, entry]: any) => {
const entryObj: any = {};
entryObj.uid = uid;
for await (const field of entry?.fields?.field ?? []) {
for await (const fsc of ctType?.fieldMapping ?? []) {
if (fsc?.contentstackFieldType !== 'group' && !field?.$?.key?.includes('__')) {
if (fsc?.contentstackFieldUid === 'title') {
entryObj[fsc?.contentstackFieldUid] = entry?.meta?.name;
}
if (fsc?.contentstackFieldUid === 'url') {
entryObj[fsc?.contentstackFieldUid] = `/${entry?.meta?.key}`;
}
if (getLastKey(fsc?.uid) === field?.$?.key) {
const content: any = await entriesFieldCreator({ field: fsc, content: field?.content, idCorrector, allAssetJSON, contentTypes, entriesData, locale });
const gpData: any = ctType?.fieldMapping?.find((elemant: any) => elemant?.uid === fsc?.uid?.split('.')?.[0]);
if (gpData?.uid) {
const ctUid = uidCorrector({ uid: gpData?.uid });
if (ctUid !== gpData?.contentstackFieldUid && fsc?.contentstackFieldUid?.includes(ctUid)) {
const newUid: any = fsc?.contentstackFieldUid?.replace(ctUid, gpData?.contentstackFieldUid);
entryObj[newUid] = content;
} else {
entryObj[fsc?.contentstackFieldUid] = content;
}
Object.entries(entryPresent?.locale?.[locale] || {}).map(async ([uid, entry]: any) => {
const entryObj: any = {};
entryObj.uid = uid;
for await (const field of entry?.fields?.field ?? []) {
for await (const fsc of ctType?.fieldMapping ?? []) {
if (fsc?.contentstackFieldType !== 'group' && !field?.$?.key?.includes('__')) {
if (fsc?.contentstackFieldUid === 'title') {
entryObj[fsc?.contentstackFieldUid] = entry?.meta?.name;
}
if (fsc?.contentstackFieldUid === 'url') {
entryObj[fsc?.contentstackFieldUid] = `/${entry?.meta?.key}`;
}
if (getLastKey(fsc?.uid) === field?.$?.key) {
const content: any = await entriesFieldCreator({ field: fsc, content: field?.content, idCorrector, allAssetJSON, contentTypes, entriesData, locale });
const gpData: any = ctType?.fieldMapping?.find((elemant: any) => elemant?.uid === fsc?.uid?.split('.')?.[0]);
if (gpData?.uid) {
const ctUid = uidCorrector({ uid: gpData?.uid });
if (ctUid !== gpData?.contentstackFieldUid && fsc?.contentstackFieldUid?.includes(ctUid)) {
const newUid: any = fsc?.contentstackFieldUid?.replace(ctUid, gpData?.contentstackFieldUid);
entryObj[newUid] = content;
} else {
entryObj[fsc?.contentstackFieldUid] = content;
}
} else {
entryObj[fsc?.contentstackFieldUid] = content;
}
}
}
}
entryObj.publish_details = [];
if (Object.keys?.(entryObj)?.length > 1) {
entryLocale[uid] = unflatten(entryObj) ?? {};
const message = getLogMessage(
srcFunc,
`Entry title "${entryObj?.title}"(${keyMapper[ctType?.contentstackUid] ?? ctType?.contentstackUid}) in the ${newLocale} locale has been successfully transformed.`,
{}
)
await customLogger(projectId, destinationStackId, 'info', message)
}
});
}
const mapperCt: string = (keyMapper[ctType?.contentstackUid] !== "" && keyMapper[ctType?.contentstackUid] !== undefined) ? keyMapper[ctType?.contentstackUid]
}
entryObj.publish_details = [];
if (Object.keys?.(entryObj)?.length > 1) {
entryLocale[uid] = unflatten(entryObj) ?? {};
const message = getLogMessage(
srcFunc,
`Entry title "${entryObj?.title}"(${keyMapper?.[ctType?.contentstackUid] ?? ctType?.contentstackUid}) in the ${newLocale} locale has been successfully transformed.`,
{}
)
await customLogger(projectId, destinationStackId, 'info', message)
}
});
const mapperCt: string = (keyMapper?.[ctType?.contentstackUid] !== "" && keyMapper?.[ctType?.contentstackUid] !== undefined) ? keyMapper?.[ctType?.contentstackUid]
: ctType?.contentstackUid;
const fileMeta = { "1": `${newLocale}.json` };
const entryPath = path.join(
Expand All @@ -298,11 +312,11 @@ const createEntry = async ({ packagePath, contentTypes, master_locale, destinati
} else {
const message = getLogMessage(
srcFunc,
`No entries found for the content type ${keyMapper[ctType?.contentstackUid] ?? ctType?.contentstackUid}.`,
`No entries found for the content type ${keyMapper?.[ctType?.contentstackUid] ?? ctType?.contentstackUid}.`,
{}
)
await customLogger(projectId, destinationStackId, 'error', message)
console.info('Entries missing for', keyMapper[ctType?.contentstackUid] ?? ctType?.contentstackUid)
console.info('Entries missing for', keyMapper?.[ctType?.contentstackUid] ?? ctType?.contentstackUid)
}
}
return true;
Expand All @@ -311,13 +325,13 @@ const createEntry = async ({ packagePath, contentTypes, master_locale, destinati
}
}

const createLocale = async (req: any, destinationStackId: string, projectId: string) => {
const createLocale = async (req: any, destinationStackId: string, projectId: string, project: any) => {
const srcFunc = 'createLocale';
try {
const baseDir = path.join(baseDirName, destinationStackId);
const localeSave = path.join(baseDir, LOCALE_DIR_NAME);
const allLocalesResp = await orgService.getLocales(req)
const masterLocale = Object?.keys?.(LOCALE_MAPPER?.masterLocale)?.[0];
const masterLocale = Object?.keys?.(project?.master_locale ?? LOCALE_MAPPER?.masterLocale)?.[0];
const msLocale: any = {};
const uid = uuidv4();
msLocale[uid] = {
Expand All @@ -333,14 +347,14 @@ const createLocale = async (req: any, destinationStackId: string, projectId: str
)
await customLogger(projectId, destinationStackId, 'info', message);
const allLocales: any = {};
for (const [key, value] of Object.entries(LOCALE_MAPPER)) {
for (const [key, value] of Object.entries(project?.locales ?? LOCALE_MAPPER)) {
const localeUid = uuidv4();
if (key !== 'masterLocale' && typeof value === 'string') {
allLocales[localeUid] = {
"code": value,
"code": key,
"fallback_locale": masterLocale,
"uid": localeUid,
"name": allLocalesResp?.data?.locales?.[value] ?? ''
"name": allLocalesResp?.data?.locales?.[key] ?? ''
}
const message = getLogMessage(
srcFunc,
Expand Down
4 changes: 2 additions & 2 deletions upload-api/src/controllers/sitecore/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ const createSitecoreMapper = async (filePath: string = "", projectId: string | s
},
data: JSON.stringify(fieldMapping),
};
const response = await axios.request(config)
const response = await axios?.request?.(config)
if (response?.data?.content_mapper?.length) {
deleteFolderSync(infoMap?.path);
logger.info('Validation success:', {
Expand All @@ -67,7 +67,7 @@ const createSitecoreMapper = async (filePath: string = "", projectId: string | s
'Content-Type': 'application/json'
},
data: {
locale: Array.from(localeData)
locale: Array?.from?.(localeData) ?? []
},
};

Expand Down
1 change: 0 additions & 1 deletion upload-api/src/services/createMapper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ const createMapper = async (filePath: string = "", projectId: string | string[],
const CMSIdentifier = config?.cmsType?.toLowerCase();
switch (CMSIdentifier) {
case 'sitecore': {
console.error('🚀 ~ sitecore create mapper ~ initial mapper');
return await createSitecoreMapper(filePath, projectId, app_token, affix, config);
}

Expand Down