pim-import 5.0.0 → 5.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/algolia/clean.js +0 -1
- package/dist/algolia/config.js +0 -1
- package/dist/algolia/downloads.js +0 -1
- package/dist/algolia/families.js +0 -1
- package/dist/algolia/inspirations.js +0 -1
- package/dist/algolia/models.js +0 -1
- package/dist/algolia/news.js +0 -1
- package/dist/algolia/pressRelease.js +0 -1
- package/dist/algolia/pressReview.js +0 -1
- package/dist/algolia/products.js +0 -1
- package/dist/algolia/projects.js +0 -1
- package/dist/algolia/stories.js +0 -1
- package/dist/algolia/subFamilies.js +0 -1
- package/dist/algolia/subModels.js +0 -1
- package/dist/browser.js +0 -1
- package/dist/downloads/classes/manageEntry.js +0 -1
- package/dist/downloads/import.js +0 -1
- package/dist/index.js +0 -1
- package/dist/libs/contentful-cda.js +0 -1
- package/dist/libs/contentful.js +0 -1
- package/dist/libs/imgix.js +0 -1
- package/dist/libs/logs.js +0 -1
- package/dist/libs/netlify.js +0 -1
- package/dist/libs/notifications.js +0 -1
- package/dist/libs/pdf.js +0 -1
- package/dist/libs/s3.js +0 -1
- package/dist/libs/sentry.js +0 -1
- package/dist/pim/config.js +0 -1
- package/dist/pim/endpoints.js +0 -1
- package/dist/pim/methods/bulkPublish.js +0 -1
- package/dist/pim/methods/catalogs.js +0 -1
- package/dist/pim/methods/checkTopicDraftAndPagePublished.js +0 -1
- package/dist/pim/methods/designers.js +0 -1
- package/dist/pim/methods/dictionary.js +0 -1
- package/dist/pim/methods/families.js +0 -1
- package/dist/pim/methods/latestProducts.js +0 -1
- package/dist/pim/methods/migrateEntryFields.js +0 -1
- package/dist/pim/methods/models.js +0 -1
- package/dist/pim/methods/pages/catalogs.js +0 -1
- package/dist/pim/methods/pages/families.js +0 -1
- package/dist/pim/methods/pages/subfamilies.js +0 -1
- package/dist/pim/methods/products.js +0 -1
- package/dist/pim/methods/subfamilies.js +0 -1
- package/dist/pim/methods/submodels.js +0 -1
- package/dist/pim/request.js +0 -1
- package/dist/resources/AllProducts.js +0 -1
- package/dist/resources/Audit.js +0 -1
- package/dist/resources/CatalogDetails.js +0 -1
- package/dist/resources/CollectionModels.js +0 -1
- package/dist/resources/CollectionSubFamilies.js +0 -1
- package/dist/resources/CollectionSubModels.js +0 -1
- package/dist/resources/DProductSubLine.js +0 -1
- package/dist/resources/FamilyDetails.js +0 -1
- package/dist/resources/ProductDetails.js +0 -1
- package/dist/resources/ProductRelation.js +0 -1
- package/dist/resources/cfFields.js +0 -1
- package/dist/types.js +0 -1
- package/dist/utils.js +0 -1
- package/package.json +7 -2
- package/.env.example +0 -46
- package/.nvmrc +0 -1
- package/.vscode/settings.json +0 -21
- package/dist/algolia/clean.js.map +0 -1
- package/dist/algolia/config.js.map +0 -1
- package/dist/algolia/downloads.js.map +0 -1
- package/dist/algolia/families.js.map +0 -1
- package/dist/algolia/inspirations.js.map +0 -1
- package/dist/algolia/models.js.map +0 -1
- package/dist/algolia/news.js.map +0 -1
- package/dist/algolia/pressRelease.js.map +0 -1
- package/dist/algolia/pressReview.js.map +0 -1
- package/dist/algolia/products.js.map +0 -1
- package/dist/algolia/projects.js.map +0 -1
- package/dist/algolia/stories.js.map +0 -1
- package/dist/algolia/subFamilies.js.map +0 -1
- package/dist/algolia/subModels.js.map +0 -1
- package/dist/browser.js.map +0 -1
- package/dist/downloads/classes/manageEntry.js.map +0 -1
- package/dist/downloads/import.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/libs/contentful-cda.js.map +0 -1
- package/dist/libs/contentful.js.map +0 -1
- package/dist/libs/imgix.js.map +0 -1
- package/dist/libs/logs.js.map +0 -1
- package/dist/libs/netlify.js.map +0 -1
- package/dist/libs/notifications.js.map +0 -1
- package/dist/libs/pdf.js.map +0 -1
- package/dist/libs/s3.js.map +0 -1
- package/dist/libs/sentry.js.map +0 -1
- package/dist/pim/config.js.map +0 -1
- package/dist/pim/endpoints.js.map +0 -1
- package/dist/pim/methods/bulkPublish.js.map +0 -1
- package/dist/pim/methods/catalogs.js.map +0 -1
- package/dist/pim/methods/checkTopicDraftAndPagePublished.js.map +0 -1
- package/dist/pim/methods/designers.js.map +0 -1
- package/dist/pim/methods/dictionary.js.map +0 -1
- package/dist/pim/methods/families.js.map +0 -1
- package/dist/pim/methods/latestProducts.js.map +0 -1
- package/dist/pim/methods/migrateEntryFields.js.map +0 -1
- package/dist/pim/methods/models.js.map +0 -1
- package/dist/pim/methods/pages/catalogs.js.map +0 -1
- package/dist/pim/methods/pages/families.js.map +0 -1
- package/dist/pim/methods/pages/subfamilies.js.map +0 -1
- package/dist/pim/methods/products.js.map +0 -1
- package/dist/pim/methods/subfamilies.js.map +0 -1
- package/dist/pim/methods/submodels.js.map +0 -1
- package/dist/pim/request.js.map +0 -1
- package/dist/resources/AllProducts.js.map +0 -1
- package/dist/resources/Audit.js.map +0 -1
- package/dist/resources/CatalogDetails.js.map +0 -1
- package/dist/resources/CollectionModels.js.map +0 -1
- package/dist/resources/CollectionSubFamilies.js.map +0 -1
- package/dist/resources/CollectionSubModels.js.map +0 -1
- package/dist/resources/DProductSubLine.js.map +0 -1
- package/dist/resources/FamilyDetails.js.map +0 -1
- package/dist/resources/ProductDetails.js.map +0 -1
- package/dist/resources/ProductRelation.js.map +0 -1
- package/dist/resources/cfFields.js.map +0 -1
- package/dist/types.js.map +0 -1
- package/dist/utils.js.map +0 -1
- package/docs/import-data-from-the-dictionary.md +0 -83
- package/docs/import-products.md +0 -61
- package/docs/import-taxonomies-from-the-catalog.md +0 -60
- package/docs/settings.md +0 -47
- package/jest.config.js +0 -16
- package/local-fn/reindex.js +0 -182
- package/src/algolia/clean.ts +0 -164
- package/src/algolia/config.ts +0 -390
- package/src/algolia/downloads.ts +0 -346
- package/src/algolia/families.ts +0 -652
- package/src/algolia/inspirations.ts +0 -315
- package/src/algolia/models.ts +0 -589
- package/src/algolia/news.ts +0 -258
- package/src/algolia/pressRelease.ts +0 -255
- package/src/algolia/pressReview.ts +0 -247
- package/src/algolia/products.ts +0 -731
- package/src/algolia/projects.ts +0 -339
- package/src/algolia/stories.ts +0 -347
- package/src/algolia/subFamilies.ts +0 -709
- package/src/algolia/subModels.ts +0 -359
- package/src/browser.ts +0 -122
- package/src/downloads/classes/manageEntry.ts +0 -99
- package/src/downloads/csv/legal.csv +0 -5
- package/src/downloads/csv/products.csv +0 -373
- package/src/downloads/import.ts +0 -381
- package/src/index.ts +0 -140
- package/src/libs/contentful-cda.ts +0 -543
- package/src/libs/contentful.ts +0 -1453
- package/src/libs/imgix.ts +0 -297
- package/src/libs/logs.ts +0 -121
- package/src/libs/netlify.ts +0 -37
- package/src/libs/notifications.ts +0 -104
- package/src/libs/pdf.ts +0 -107
- package/src/libs/s3.ts +0 -305
- package/src/libs/sentry.ts +0 -33
- package/src/pim/config.ts +0 -84
- package/src/pim/data/productFields.json +0 -1178
- package/src/pim/endpoints.ts +0 -364
- package/src/pim/methods/bulkPublish.ts +0 -266
- package/src/pim/methods/catalogs.ts +0 -586
- package/src/pim/methods/checkTopicDraftAndPagePublished.ts +0 -70
- package/src/pim/methods/designers.ts +0 -128
- package/src/pim/methods/dictionary.ts +0 -611
- package/src/pim/methods/families.ts +0 -345
- package/src/pim/methods/latestProducts.ts +0 -70
- package/src/pim/methods/migrateEntryFields.ts +0 -99
- package/src/pim/methods/models.ts +0 -349
- package/src/pim/methods/pages/catalogs.ts +0 -28
- package/src/pim/methods/pages/families.ts +0 -50
- package/src/pim/methods/pages/subfamilies.ts +0 -98
- package/src/pim/methods/products.ts +0 -3297
- package/src/pim/methods/subfamilies.ts +0 -706
- package/src/pim/methods/submodels.ts +0 -262
- package/src/pim/request.ts +0 -61
- package/src/resources/AllProducts.ts +0 -41
- package/src/resources/Audit.ts +0 -24
- package/src/resources/CatalogDetails.ts +0 -51
- package/src/resources/CollectionModels.ts +0 -42
- package/src/resources/CollectionSubFamilies.ts +0 -45
- package/src/resources/CollectionSubModels.ts +0 -36
- package/src/resources/DProductSubLine.ts +0 -34
- package/src/resources/FamilyDetails.ts +0 -31
- package/src/resources/ProductDetails.ts +0 -352
- package/src/resources/ProductRelation.ts +0 -24
- package/src/resources/cfFields.ts +0 -8
- package/src/types.ts +0 -268
- package/src/utils.ts +0 -553
- package/tsconfig.json +0 -93
- package/tslint.json +0 -22
- package/types/libs/puppeteer.d.ts +0 -17
- package/types/pim/methods/checkIp.d.ts +0 -1
- /package/{types → dist}/algolia/clean.d.ts +0 -0
- /package/{types → dist}/algolia/config.d.ts +0 -0
- /package/{types → dist}/algolia/downloads.d.ts +0 -0
- /package/{types → dist}/algolia/families.d.ts +0 -0
- /package/{types → dist}/algolia/inspirations.d.ts +0 -0
- /package/{types → dist}/algolia/models.d.ts +0 -0
- /package/{types → dist}/algolia/news.d.ts +0 -0
- /package/{types → dist}/algolia/pressRelease.d.ts +0 -0
- /package/{types → dist}/algolia/pressReview.d.ts +0 -0
- /package/{types → dist}/algolia/products.d.ts +0 -0
- /package/{types → dist}/algolia/projects.d.ts +0 -0
- /package/{types → dist}/algolia/stories.d.ts +0 -0
- /package/{types → dist}/algolia/subFamilies.d.ts +0 -0
- /package/{types → dist}/algolia/subModels.d.ts +0 -0
- /package/{types → dist}/browser.d.ts +0 -0
- /package/{types → dist}/downloads/classes/manageEntry.d.ts +0 -0
- /package/{types → dist}/downloads/import.d.ts +0 -0
- /package/{types → dist}/index.d.ts +0 -0
- /package/{types → dist}/libs/contentful-cda.d.ts +0 -0
- /package/{types → dist}/libs/contentful.d.ts +0 -0
- /package/{types → dist}/libs/imgix.d.ts +0 -0
- /package/{types → dist}/libs/logs.d.ts +0 -0
- /package/{types → dist}/libs/netlify.d.ts +0 -0
- /package/{types → dist}/libs/notifications.d.ts +0 -0
- /package/{types → dist}/libs/pdf.d.ts +0 -0
- /package/{types → dist}/libs/s3.d.ts +0 -0
- /package/{types → dist}/libs/sentry.d.ts +0 -0
- /package/{types → dist}/pim/config.d.ts +0 -0
- /package/{types → dist}/pim/endpoints.d.ts +0 -0
- /package/{types → dist}/pim/methods/bulkPublish.d.ts +0 -0
- /package/{types → dist}/pim/methods/catalogs.d.ts +0 -0
- /package/{types → dist}/pim/methods/checkTopicDraftAndPagePublished.d.ts +0 -0
- /package/{types → dist}/pim/methods/designers.d.ts +0 -0
- /package/{types → dist}/pim/methods/dictionary.d.ts +0 -0
- /package/{types → dist}/pim/methods/families.d.ts +0 -0
- /package/{types → dist}/pim/methods/latestProducts.d.ts +0 -0
- /package/{types → dist}/pim/methods/migrateEntryFields.d.ts +0 -0
- /package/{types → dist}/pim/methods/models.d.ts +0 -0
- /package/{types → dist}/pim/methods/pages/catalogs.d.ts +0 -0
- /package/{types → dist}/pim/methods/pages/families.d.ts +0 -0
- /package/{types → dist}/pim/methods/pages/subfamilies.d.ts +0 -0
- /package/{types → dist}/pim/methods/products.d.ts +0 -0
- /package/{types → dist}/pim/methods/subfamilies.d.ts +0 -0
- /package/{types → dist}/pim/methods/submodels.d.ts +0 -0
- /package/{types → dist}/pim/request.d.ts +0 -0
- /package/{types → dist}/resources/AllProducts.d.ts +0 -0
- /package/{types → dist}/resources/Audit.d.ts +0 -0
- /package/{types → dist}/resources/CatalogDetails.d.ts +0 -0
- /package/{types → dist}/resources/CollectionModels.d.ts +0 -0
- /package/{types → dist}/resources/CollectionSubFamilies.d.ts +0 -0
- /package/{types → dist}/resources/CollectionSubModels.d.ts +0 -0
- /package/{types → dist}/resources/DProductSubLine.d.ts +0 -0
- /package/{types → dist}/resources/FamilyDetails.d.ts +0 -0
- /package/{types → dist}/resources/ProductDetails.d.ts +0 -0
- /package/{types → dist}/resources/ProductRelation.d.ts +0 -0
- /package/{types → dist}/resources/cfFields.d.ts +0 -0
- /package/{types → dist}/types.d.ts +0 -0
- /package/{types → dist}/utils.d.ts +0 -0
|
@@ -1,345 +0,0 @@
|
|
|
1
|
-
import { getFamilies } from "../endpoints";
|
|
2
|
-
import { log, serverUtils } from "../../libs/logs";
|
|
3
|
-
import type {
|
|
4
|
-
Entry,
|
|
5
|
-
CreateEntryProps,
|
|
6
|
-
} from "contentful-management/dist/typings/entities/entry";
|
|
7
|
-
import {
|
|
8
|
-
updateEntry,
|
|
9
|
-
createEntryWithId,
|
|
10
|
-
getEnvironmentDefaultLocaleCode,
|
|
11
|
-
getEntryByID,
|
|
12
|
-
cfLocales,
|
|
13
|
-
addToRelationFields,
|
|
14
|
-
addFieldValue,
|
|
15
|
-
// getAllEntries,
|
|
16
|
-
} from "../../libs/contentful";
|
|
17
|
-
import { FamilyDetails } from "../../resources/FamilyDetails";
|
|
18
|
-
import {
|
|
19
|
-
sleep,
|
|
20
|
-
getPimTranslations,
|
|
21
|
-
stringToSlug,
|
|
22
|
-
sanitizeValue,
|
|
23
|
-
getLocalISOTime,
|
|
24
|
-
} from "../../utils";
|
|
25
|
-
import { CfLocalizedEntryField, PaginationResults } from "../../types";
|
|
26
|
-
import { addDesignerData } from "./designers";
|
|
27
|
-
import { setHideInRegionField } from "./products";
|
|
28
|
-
|
|
29
|
-
// const getComponentSubFamilyPagesData = async (
|
|
30
|
-
// componentID: string,
|
|
31
|
-
// componentModule: Entry | null
|
|
32
|
-
// // topicFamily: Entry
|
|
33
|
-
// ) => {
|
|
34
|
-
// const componentData: CreateEntryProps = {
|
|
35
|
-
// fields: componentModule?.fields || {},
|
|
36
|
-
// };
|
|
37
|
-
|
|
38
|
-
// componentData.fields = await addFieldValue(
|
|
39
|
-
// componentData,
|
|
40
|
-
// "internalName",
|
|
41
|
-
// componentID
|
|
42
|
-
// );
|
|
43
|
-
|
|
44
|
-
// // Associazione subfamilypages utile solo per primo import
|
|
45
|
-
// // const allSubfamilies = await getAllEntries(
|
|
46
|
-
// // "topicSubFamily",
|
|
47
|
-
// // "sys",
|
|
48
|
-
// // "fields.parentFamily.sys.id",
|
|
49
|
-
// // topicFamily.sys.id
|
|
50
|
-
// // );
|
|
51
|
-
|
|
52
|
-
// // for (const subFamily of allSubfamilies) {
|
|
53
|
-
// // componentData.fields = await addToRelationFields(
|
|
54
|
-
// // componentData,
|
|
55
|
-
// // "subfamilyPages",
|
|
56
|
-
// // `${subFamily.sys.id}_PAGE`,
|
|
57
|
-
// // true
|
|
58
|
-
// // );
|
|
59
|
-
// // }
|
|
60
|
-
|
|
61
|
-
// return componentData;
|
|
62
|
-
// };
|
|
63
|
-
|
|
64
|
-
// const addComponentSubFamilyPages = async (
|
|
65
|
-
// topicFamily: Entry
|
|
66
|
-
// ): Promise<Entry> => {
|
|
67
|
-
// const componentID = `CC_${topicFamily.sys.id}`;
|
|
68
|
-
// const componentContentType = "componentSubFamilyPages";
|
|
69
|
-
// let componentSubFamilyPages = await getEntryByID(
|
|
70
|
-
// componentID,
|
|
71
|
-
// componentContentType
|
|
72
|
-
// );
|
|
73
|
-
|
|
74
|
-
// const componentData = await getComponentSubFamilyPagesData(
|
|
75
|
-
// componentID,
|
|
76
|
-
// componentSubFamilyPages
|
|
77
|
-
// // topicFamily
|
|
78
|
-
// );
|
|
79
|
-
|
|
80
|
-
// if (componentSubFamilyPages) {
|
|
81
|
-
// log(
|
|
82
|
-
// `Update ${componentContentType} for the ${topicFamily.sys.id} family page`
|
|
83
|
-
// );
|
|
84
|
-
// componentSubFamilyPages = await updateEntry(
|
|
85
|
-
// componentSubFamilyPages,
|
|
86
|
-
// componentData,
|
|
87
|
-
// componentSubFamilyPages.isPublished()
|
|
88
|
-
// );
|
|
89
|
-
// } else {
|
|
90
|
-
// log(
|
|
91
|
-
// `Add ${componentContentType} for the ${topicFamily.sys.id} family page`
|
|
92
|
-
// );
|
|
93
|
-
// componentSubFamilyPages = await createEntryWithId(
|
|
94
|
-
// componentContentType,
|
|
95
|
-
// componentID,
|
|
96
|
-
// componentData
|
|
97
|
-
// );
|
|
98
|
-
// try {
|
|
99
|
-
// componentSubFamilyPages = await componentSubFamilyPages.publish();
|
|
100
|
-
// } catch (err: any) {
|
|
101
|
-
// log(`Cannot publish entry.`);
|
|
102
|
-
// log(err);
|
|
103
|
-
// }
|
|
104
|
-
// }
|
|
105
|
-
|
|
106
|
-
// return componentSubFamilyPages;
|
|
107
|
-
// };
|
|
108
|
-
|
|
109
|
-
const getFamilyPageData = async (
|
|
110
|
-
names: CfLocalizedEntryField,
|
|
111
|
-
slugs: CfLocalizedEntryField,
|
|
112
|
-
pageId: string,
|
|
113
|
-
familyEntry: Entry,
|
|
114
|
-
familyPageEntry: Entry
|
|
115
|
-
): Promise<CreateEntryProps> => {
|
|
116
|
-
const defEnvLocaleCode = await getEnvironmentDefaultLocaleCode();
|
|
117
|
-
const pageData: CreateEntryProps = {
|
|
118
|
-
fields: familyPageEntry?.fields || {},
|
|
119
|
-
};
|
|
120
|
-
|
|
121
|
-
pageData.fields.title = names;
|
|
122
|
-
pageData.fields.slug = slugs;
|
|
123
|
-
|
|
124
|
-
pageData.fields = await addFieldValue(pageData, "internalName", pageId);
|
|
125
|
-
pageData.fields = await addFieldValue(pageData, "type", "CatalogFamily");
|
|
126
|
-
|
|
127
|
-
// Topic
|
|
128
|
-
pageData.fields = await addToRelationFields(
|
|
129
|
-
pageData,
|
|
130
|
-
"topic",
|
|
131
|
-
familyEntry.sys.id
|
|
132
|
-
);
|
|
133
|
-
|
|
134
|
-
// Contents - componentSubFamilyPages
|
|
135
|
-
// const componentModule = await addComponentSubFamilyPages(familyEntry);
|
|
136
|
-
// pageData.fields = await addToRelationFields(
|
|
137
|
-
// pageData,
|
|
138
|
-
// "contents",
|
|
139
|
-
// componentModule.sys.id,
|
|
140
|
-
// true
|
|
141
|
-
// );
|
|
142
|
-
|
|
143
|
-
const destinations =
|
|
144
|
-
familyEntry?.fields?.destinations?.[defEnvLocaleCode] || [];
|
|
145
|
-
pageData.fields = await setHideInRegionField(destinations, pageData);
|
|
146
|
-
|
|
147
|
-
return pageData;
|
|
148
|
-
};
|
|
149
|
-
|
|
150
|
-
/**
|
|
151
|
-
* Create or update family page
|
|
152
|
-
*
|
|
153
|
-
* @param familyEntry
|
|
154
|
-
* @returns
|
|
155
|
-
*/
|
|
156
|
-
export const createOrUpdatePage = async (
|
|
157
|
-
familyEntry: Entry
|
|
158
|
-
): Promise<Entry> => {
|
|
159
|
-
const defaultEnvironmentLocaleCode = await getEnvironmentDefaultLocaleCode();
|
|
160
|
-
const pageId = `${familyEntry.sys.id}_PAGE`;
|
|
161
|
-
const names: CfLocalizedEntryField = {};
|
|
162
|
-
const slugs: CfLocalizedEntryField = {};
|
|
163
|
-
|
|
164
|
-
for (const locale of cfLocales) {
|
|
165
|
-
names[locale] =
|
|
166
|
-
familyEntry.fields.name[locale] ||
|
|
167
|
-
familyEntry.fields.name[defaultEnvironmentLocaleCode];
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
for (const locale of cfLocales) {
|
|
171
|
-
slugs[locale] = stringToSlug(
|
|
172
|
-
`${
|
|
173
|
-
familyEntry.fields.name[locale] ||
|
|
174
|
-
familyEntry.fields.name[defaultEnvironmentLocaleCode]
|
|
175
|
-
}`.toLowerCase()
|
|
176
|
-
);
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
// PAGE
|
|
180
|
-
let familyPageEntry: Entry = await getEntryByID(pageId, "page");
|
|
181
|
-
const pageData: CreateEntryProps = await getFamilyPageData(
|
|
182
|
-
names,
|
|
183
|
-
slugs,
|
|
184
|
-
pageId,
|
|
185
|
-
familyEntry,
|
|
186
|
-
familyPageEntry
|
|
187
|
-
);
|
|
188
|
-
if (familyPageEntry) {
|
|
189
|
-
log(`Family page ${pageId} already exists. Updating...`);
|
|
190
|
-
familyPageEntry = await updateEntry(
|
|
191
|
-
familyPageEntry,
|
|
192
|
-
pageData,
|
|
193
|
-
familyPageEntry.isPublished()
|
|
194
|
-
);
|
|
195
|
-
} else {
|
|
196
|
-
log(`Family page ${pageId} not exists. Create new entry with data`);
|
|
197
|
-
familyPageEntry = await createEntryWithId("page", pageId, pageData);
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
return familyPageEntry;
|
|
201
|
-
};
|
|
202
|
-
|
|
203
|
-
const getTopicFamilyData = async (
|
|
204
|
-
family: FamilyDetails,
|
|
205
|
-
topicFamily: Entry
|
|
206
|
-
) => {
|
|
207
|
-
const defaultEnvironmentLocaleCode = await getEnvironmentDefaultLocaleCode();
|
|
208
|
-
const data: CreateEntryProps = {
|
|
209
|
-
fields: topicFamily?.fields || {},
|
|
210
|
-
};
|
|
211
|
-
data.fields.name = getPimTranslations(family.data);
|
|
212
|
-
data.fields = await addFieldValue(data, "code", family.data.code);
|
|
213
|
-
data.fields = await addFieldValue(data, "priority", family.priority);
|
|
214
|
-
data.fields.description = getPimTranslations(family, "description1");
|
|
215
|
-
|
|
216
|
-
// Designer
|
|
217
|
-
if (family?.designers) {
|
|
218
|
-
const designer = family.designers[0];
|
|
219
|
-
if (designer?.code) {
|
|
220
|
-
log(`set ${designer.code} designer relation`);
|
|
221
|
-
data.fields = await addDesignerData(data, designer);
|
|
222
|
-
} else {
|
|
223
|
-
log(`no designer found`, "WARN");
|
|
224
|
-
if (data.fields.designer?.[defaultEnvironmentLocaleCode]) {
|
|
225
|
-
log(
|
|
226
|
-
`remove old designer relation with ${data.fields.designer?.[defaultEnvironmentLocaleCode].sys.id}`
|
|
227
|
-
);
|
|
228
|
-
data.fields.designer = {};
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
// Destinations
|
|
234
|
-
if (family?.destinations?.length) {
|
|
235
|
-
log(`set destinations`);
|
|
236
|
-
data.fields = await addFieldValue(
|
|
237
|
-
data,
|
|
238
|
-
"destinations",
|
|
239
|
-
family.destinations
|
|
240
|
-
);
|
|
241
|
-
} else {
|
|
242
|
-
log(`destinations not found`, "WARN");
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
// lastPimSyncDate
|
|
246
|
-
data.fields = await addFieldValue(data, "lastPimSyncDate", getLocalISOTime());
|
|
247
|
-
|
|
248
|
-
return data;
|
|
249
|
-
};
|
|
250
|
-
|
|
251
|
-
/**
|
|
252
|
-
* Import family
|
|
253
|
-
*
|
|
254
|
-
* create/update topicFamily
|
|
255
|
-
* - name
|
|
256
|
-
* - code
|
|
257
|
-
* - lastPimSyncDate
|
|
258
|
-
*
|
|
259
|
-
* @param family
|
|
260
|
-
* @returns
|
|
261
|
-
*/
|
|
262
|
-
const importFamily = async (family: FamilyDetails): Promise<Entry> => {
|
|
263
|
-
const code = `${family.data.code}`;
|
|
264
|
-
let topicFamily: Entry = await getEntryByID(code, "topicFamily");
|
|
265
|
-
|
|
266
|
-
const topicFamilyData: CreateEntryProps = await getTopicFamilyData(
|
|
267
|
-
family,
|
|
268
|
-
topicFamily
|
|
269
|
-
);
|
|
270
|
-
if (topicFamily) {
|
|
271
|
-
log(`The topicFamily ${code} already exists. Updating...`);
|
|
272
|
-
topicFamily = await updateEntry(
|
|
273
|
-
topicFamily,
|
|
274
|
-
topicFamilyData,
|
|
275
|
-
topicFamily.isPublished()
|
|
276
|
-
);
|
|
277
|
-
} else {
|
|
278
|
-
log(`The topicFamily ${code} not exists. Creating...`);
|
|
279
|
-
topicFamily = await createEntryWithId("topicFamily", code, topicFamilyData);
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
return topicFamily;
|
|
283
|
-
};
|
|
284
|
-
|
|
285
|
-
/**
|
|
286
|
-
* Import families
|
|
287
|
-
*
|
|
288
|
-
* @param {number} offset Default 0
|
|
289
|
-
* @param {number} limit Range 0-50. Default 50
|
|
290
|
-
* @returns {object}
|
|
291
|
-
*/
|
|
292
|
-
export const importFamilies = async (
|
|
293
|
-
offset: number = 0,
|
|
294
|
-
limit: number = 50
|
|
295
|
-
): Promise<PaginationResults> => {
|
|
296
|
-
log(`importFamilies - offset: ${offset} limit: ${limit}`, "INFO");
|
|
297
|
-
const families = await getFamilies();
|
|
298
|
-
|
|
299
|
-
let count: number = 0;
|
|
300
|
-
let current: number = 0;
|
|
301
|
-
for (const family of families) {
|
|
302
|
-
if (offset <= count || limit === -1) {
|
|
303
|
-
if (!sanitizeValue(family.data.code)) {
|
|
304
|
-
log(`The family code ${family.data.code} is not valid`, "WARN");
|
|
305
|
-
} else {
|
|
306
|
-
log(`${count + 1} of ${families.length}`);
|
|
307
|
-
const topicFamily = await importFamily(family);
|
|
308
|
-
|
|
309
|
-
await createOrUpdatePage(topicFamily);
|
|
310
|
-
|
|
311
|
-
if (serverUtils) {
|
|
312
|
-
const currentTotal =
|
|
313
|
-
families.length > limit && limit !== -1 ? limit : families.length;
|
|
314
|
-
const progress = Math.floor((++current / currentTotal) * 100);
|
|
315
|
-
serverUtils.updateProgress(progress);
|
|
316
|
-
}
|
|
317
|
-
|
|
318
|
-
if (limit !== -1 && count + 1 - offset >= limit) {
|
|
319
|
-
break;
|
|
320
|
-
}
|
|
321
|
-
// Max 7 calls per seconds
|
|
322
|
-
if (count % 2 === 0 && count < families.length) {
|
|
323
|
-
await sleep(1000);
|
|
324
|
-
}
|
|
325
|
-
if (serverUtils) {
|
|
326
|
-
serverUtils.log(family.data.code);
|
|
327
|
-
}
|
|
328
|
-
}
|
|
329
|
-
}
|
|
330
|
-
count++;
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
const nextOffset = Number(offset) + Number(limit);
|
|
334
|
-
|
|
335
|
-
if (serverUtils) {
|
|
336
|
-
serverUtils.updateProgress(100);
|
|
337
|
-
}
|
|
338
|
-
|
|
339
|
-
return {
|
|
340
|
-
offset: nextOffset,
|
|
341
|
-
limit: Number(limit),
|
|
342
|
-
completed: nextOffset >= families.length,
|
|
343
|
-
total: families.length,
|
|
344
|
-
};
|
|
345
|
-
};
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
import { AvailableCatalogs, PaginationResults } from "../../types";
|
|
2
|
-
import { getLatestProducts } from "../endpoints";
|
|
3
|
-
import { log, serverUtils } from "../../libs/logs";
|
|
4
|
-
import { ProductDetails } from "../../resources/ProductDetails";
|
|
5
|
-
import { importProduct } from "./products";
|
|
6
|
-
import { secondBetweenTwoDate } from "../../utils";
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Import latest products
|
|
10
|
-
*
|
|
11
|
-
* @param {string} catalogCode The catalog code. Format: ARCHITECTURAL
|
|
12
|
-
* @param {string} lastModified The last modified data. Format: 20200426T07:50:00 - yearmonthdayThour:minute:second
|
|
13
|
-
* @param {number} offset Default 0
|
|
14
|
-
* @param {number} limit Default 100
|
|
15
|
-
* @param {string} lastModifiedTo The last modified to data. Format: 20200426T07:50:00 - yearmonthdayThour:minute:second
|
|
16
|
-
*/
|
|
17
|
-
export const importLatestProducts = async (
|
|
18
|
-
catalog: AvailableCatalogs,
|
|
19
|
-
lastModified: string,
|
|
20
|
-
offset: number = 0,
|
|
21
|
-
limit: number = 100,
|
|
22
|
-
lastModifiedTo: string = ""
|
|
23
|
-
): Promise<PaginationResults> => {
|
|
24
|
-
const timeStart = new Date();
|
|
25
|
-
offset = Number(offset);
|
|
26
|
-
limit = Number(limit);
|
|
27
|
-
log(
|
|
28
|
-
`importLatestProducts - catalog: ${catalog} lastModified: ${lastModified} offset: ${offset} limit: ${limit} lastModifiedTo: ${lastModifiedTo}`,
|
|
29
|
-
"INFO"
|
|
30
|
-
);
|
|
31
|
-
|
|
32
|
-
const data = await getLatestProducts(
|
|
33
|
-
catalog,
|
|
34
|
-
lastModified,
|
|
35
|
-
offset,
|
|
36
|
-
limit,
|
|
37
|
-
lastModifiedTo
|
|
38
|
-
);
|
|
39
|
-
|
|
40
|
-
const total: number = data.totalCount;
|
|
41
|
-
const products = data.pagedCollection;
|
|
42
|
-
|
|
43
|
-
log(`${total} products founded`);
|
|
44
|
-
|
|
45
|
-
let count: number = offset + 1;
|
|
46
|
-
let current: number = 0;
|
|
47
|
-
for (const product of products) {
|
|
48
|
-
log(`${count} of ${total}`);
|
|
49
|
-
const productDetails: ProductDetails = product.content;
|
|
50
|
-
await importProduct(productDetails, catalog);
|
|
51
|
-
count++;
|
|
52
|
-
if (serverUtils) {
|
|
53
|
-
serverUtils.log(productDetails.code);
|
|
54
|
-
const progress = Math.floor((++current / products.length) * 100);
|
|
55
|
-
serverUtils.updateProgress(progress);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
const timeEnd = new Date();
|
|
60
|
-
const seconds = secondBetweenTwoDate(timeStart, timeEnd);
|
|
61
|
-
log(`Request time: ${seconds} seconds`);
|
|
62
|
-
|
|
63
|
-
const completed = limit === -1 || offset >= total;
|
|
64
|
-
return {
|
|
65
|
-
offset: completed ? offset : offset + limit,
|
|
66
|
-
limit,
|
|
67
|
-
completed,
|
|
68
|
-
total,
|
|
69
|
-
};
|
|
70
|
-
};
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
import { getEntryByCode, getEntryByID } from "../../libs/contentful";
|
|
2
|
-
import { log } from "../../libs/logs";
|
|
3
|
-
|
|
4
|
-
type MapEntries = { [key: string]: string };
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Migrates specified fields from old entries to new entries in Contentful.
|
|
8
|
-
*
|
|
9
|
-
* @param {MapEntries} mapEntries - A mapping of old entry IDs to new entry IDs.
|
|
10
|
-
* @param {string} type - The type of the entries (e.g., "topicModel").
|
|
11
|
-
* @param {string[]} fieldKeys - The keys of the fields to migrate.
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
const mapEntries = {
|
|
15
|
-
MODEL473: "MODEL842",
|
|
16
|
-
MODEL475: "MODEL843",
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
const fieldKeys = [
|
|
20
|
-
"thumbnailImgix",
|
|
21
|
-
"galleryImagesImgix",
|
|
22
|
-
"productFieldFilter",
|
|
23
|
-
];
|
|
24
|
-
|
|
25
|
-
await pimImport.migrateEntryFields(mapEntries, "topicModel", fieldKeys)
|
|
26
|
-
*/
|
|
27
|
-
export const migrateEntryFields = async (
|
|
28
|
-
mapEntries: MapEntries,
|
|
29
|
-
type: string,
|
|
30
|
-
fieldKeys: string[]
|
|
31
|
-
) => {
|
|
32
|
-
for (const [oldEntryId, newEntryId] of Object.entries(mapEntries)) {
|
|
33
|
-
log(`Migrating fields from ${oldEntryId} to ${newEntryId}...`);
|
|
34
|
-
console.log(fieldKeys.length);
|
|
35
|
-
let oldEntry = await getEntryByCode(oldEntryId, type);
|
|
36
|
-
if (!oldEntry) {
|
|
37
|
-
log(`Old entry not found: ${oldEntryId}`, "WARN");
|
|
38
|
-
continue;
|
|
39
|
-
}
|
|
40
|
-
let oldEntryPage = await getEntryByID(`${oldEntryId}_PAGE`, "page");
|
|
41
|
-
if (!oldEntryPage) {
|
|
42
|
-
log(`Old entry page not found for ${oldEntryId}`, "WARN");
|
|
43
|
-
continue;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
let newEntry = await getEntryByCode(newEntryId, type);
|
|
47
|
-
if (!newEntry) {
|
|
48
|
-
log(`New entry not found: ${newEntryId}`, "WARN");
|
|
49
|
-
continue;
|
|
50
|
-
}
|
|
51
|
-
let newEntryPage = await getEntryByID(`${newEntryId}_PAGE`, "page");
|
|
52
|
-
if (!newEntryPage) {
|
|
53
|
-
log(`New entry page not found for ${newEntryId}`, "WARN");
|
|
54
|
-
continue;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
log(`Migrating fields from ${oldEntryId} to ${newEntryId}...`);
|
|
58
|
-
|
|
59
|
-
for (const fieldKey of fieldKeys) {
|
|
60
|
-
if (oldEntry.fields[fieldKey]) {
|
|
61
|
-
log(`Migrating field ${fieldKey}...`);
|
|
62
|
-
newEntry.fields[fieldKey] = oldEntry.fields[fieldKey];
|
|
63
|
-
} else {
|
|
64
|
-
log(`Field ${fieldKey} not found in old entry ${oldEntryId}`, "WARN");
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
console.log(`Updating entry ${newEntryId} with migrated fields...`);
|
|
69
|
-
newEntry = await newEntry.update();
|
|
70
|
-
if (!newEntry.isPublished()) {
|
|
71
|
-
console.log(`Publishing updated entry ${newEntryId}...`);
|
|
72
|
-
await newEntry.publish();
|
|
73
|
-
} else {
|
|
74
|
-
console.log(`Entry ${newEntryId} is already published.`);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
if (!newEntryPage.isPublished()) {
|
|
78
|
-
console.log(`Publishing updated entry page ${newEntryId}_PAGE...`);
|
|
79
|
-
await newEntryPage.publish();
|
|
80
|
-
} else {
|
|
81
|
-
console.log(`Entry page ${newEntryId}_PAGE is already published.`);
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
if (oldEntry.isPublished()) {
|
|
85
|
-
console.log(`Unpublishing old entry ${oldEntryId}...`);
|
|
86
|
-
await oldEntry.unpublish();
|
|
87
|
-
} else {
|
|
88
|
-
console.log(`Entry ${oldEntryId} is already unpublished.`);
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
if (oldEntryPage.isPublished()) {
|
|
92
|
-
console.log(`Unpublishing old entry page ${oldEntryId}_PAGE...`);
|
|
93
|
-
await oldEntryPage.unpublish();
|
|
94
|
-
} else {
|
|
95
|
-
console.log(`Entry page ${newEntryId}_PAGE is already unpublished.`);
|
|
96
|
-
}
|
|
97
|
-
log(`Migrated fields for entry ${newEntryId}`);
|
|
98
|
-
}
|
|
99
|
-
};
|