pim-import 5.0.1 → 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 -45
- 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,262 +0,0 @@
|
|
|
1
|
-
import { PaginationResults } from "../../types";
|
|
2
|
-
import { log, serverUtils } from "../../libs/logs";
|
|
3
|
-
import { getOtherCatalogData } from "../endpoints";
|
|
4
|
-
import {
|
|
5
|
-
CollectionSubModels,
|
|
6
|
-
PagedCollectionEntity,
|
|
7
|
-
} from "../../resources/CollectionSubModels";
|
|
8
|
-
import type {
|
|
9
|
-
Entry,
|
|
10
|
-
CreateEntryProps,
|
|
11
|
-
} from "contentful-management/dist/typings/entities/entry";
|
|
12
|
-
import {
|
|
13
|
-
updateEntry,
|
|
14
|
-
createEntryWithId,
|
|
15
|
-
getEnvironmentDefaultLocaleCode,
|
|
16
|
-
getEntryByID,
|
|
17
|
-
getEntryByCode,
|
|
18
|
-
addFieldValue,
|
|
19
|
-
addToRelationFields,
|
|
20
|
-
} from "../../libs/contentful";
|
|
21
|
-
import {
|
|
22
|
-
sleep,
|
|
23
|
-
getPimTranslations,
|
|
24
|
-
getLocalISOTime,
|
|
25
|
-
secondBetweenTwoDate,
|
|
26
|
-
} from "../../utils";
|
|
27
|
-
|
|
28
|
-
const getTopicSubModelData = async (
|
|
29
|
-
subModel: PagedCollectionEntity,
|
|
30
|
-
topicSubModel: Entry
|
|
31
|
-
) => {
|
|
32
|
-
const defaultEnvironmentLocaleCode = await getEnvironmentDefaultLocaleCode();
|
|
33
|
-
const data: CreateEntryProps = {
|
|
34
|
-
fields: topicSubModel?.fields || {},
|
|
35
|
-
};
|
|
36
|
-
data.fields.name = getPimTranslations(subModel.data);
|
|
37
|
-
data.fields = await addFieldValue(data, "code", subModel.code);
|
|
38
|
-
data.fields = await addFieldValue(data, "priority", subModel.priority);
|
|
39
|
-
|
|
40
|
-
// Related subFamily
|
|
41
|
-
if (subModel.subFamilyCode) {
|
|
42
|
-
const subFamilyEntry = await getEntryByCode(
|
|
43
|
-
subModel.subFamilyCode,
|
|
44
|
-
"topicSubFamily",
|
|
45
|
-
"sys,fields.code,fields.catalog"
|
|
46
|
-
);
|
|
47
|
-
if (subFamilyEntry) {
|
|
48
|
-
data.fields = await addToRelationFields(
|
|
49
|
-
data,
|
|
50
|
-
"subFamily",
|
|
51
|
-
subFamilyEntry.sys.id
|
|
52
|
-
);
|
|
53
|
-
|
|
54
|
-
// Catalog
|
|
55
|
-
data.fields = await addToRelationFields(
|
|
56
|
-
data,
|
|
57
|
-
"catalog",
|
|
58
|
-
subFamilyEntry.fields.catalog[defaultEnvironmentLocaleCode].sys.id
|
|
59
|
-
);
|
|
60
|
-
} else {
|
|
61
|
-
log(
|
|
62
|
-
`topicSubFamily with code ${subModel.subFamilyCode} not found so it is not possible to set subFamily and the catalog fields`,
|
|
63
|
-
"WARN"
|
|
64
|
-
);
|
|
65
|
-
}
|
|
66
|
-
} else {
|
|
67
|
-
log(
|
|
68
|
-
`subFamily not set so it is not possible to set it and the catalog fields`,
|
|
69
|
-
"WARN"
|
|
70
|
-
);
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
// Related productLine
|
|
74
|
-
if (subModel.productLineCode) {
|
|
75
|
-
const productLineEntry = await getEntryByCode(
|
|
76
|
-
subModel.productLineCode,
|
|
77
|
-
"topicProductLine",
|
|
78
|
-
"sys,fields.code"
|
|
79
|
-
);
|
|
80
|
-
if (productLineEntry) {
|
|
81
|
-
data.fields = await addToRelationFields(
|
|
82
|
-
data,
|
|
83
|
-
"productLine",
|
|
84
|
-
productLineEntry.sys.id
|
|
85
|
-
);
|
|
86
|
-
} else {
|
|
87
|
-
log(
|
|
88
|
-
`topicProductLine with code ${subModel.productLineCode} not found`,
|
|
89
|
-
"WARN"
|
|
90
|
-
);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
// Related parentModel
|
|
95
|
-
if (subModel.parentModel?.code) {
|
|
96
|
-
const modelEntry = await getEntryByCode(
|
|
97
|
-
subModel.parentModel.code,
|
|
98
|
-
"topicModel",
|
|
99
|
-
"sys,fields.code"
|
|
100
|
-
);
|
|
101
|
-
if (modelEntry) {
|
|
102
|
-
data.fields = await addToRelationFields(
|
|
103
|
-
data,
|
|
104
|
-
"parentModel",
|
|
105
|
-
modelEntry.sys.id
|
|
106
|
-
);
|
|
107
|
-
} else {
|
|
108
|
-
log(
|
|
109
|
-
`topicModel with code ${subModel.parentModel.code} not found`,
|
|
110
|
-
"WARN"
|
|
111
|
-
);
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
// Destinations
|
|
116
|
-
if(subModel?.destinations?.length){
|
|
117
|
-
log(`set destinations`);
|
|
118
|
-
data.fields = await addFieldValue(data, "destinations", subModel.destinations);
|
|
119
|
-
}else{
|
|
120
|
-
log(`destinations not found`, "WARN");
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
// lastPimSyncDate
|
|
124
|
-
data.fields = await addFieldValue(data, "lastPimSyncDate", getLocalISOTime());
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
return data;
|
|
128
|
-
};
|
|
129
|
-
|
|
130
|
-
/**
|
|
131
|
-
* Import subModel
|
|
132
|
-
*
|
|
133
|
-
* create/update topicSubModel
|
|
134
|
-
* - name
|
|
135
|
-
* - code
|
|
136
|
-
* - priority
|
|
137
|
-
* - catalog
|
|
138
|
-
* - subFamily
|
|
139
|
-
* - productLine
|
|
140
|
-
* - parentModel
|
|
141
|
-
* - lastPimSyncDate
|
|
142
|
-
*
|
|
143
|
-
* @param subModel
|
|
144
|
-
* @returns
|
|
145
|
-
*/
|
|
146
|
-
const importSubModel = async (
|
|
147
|
-
subModel: PagedCollectionEntity
|
|
148
|
-
): Promise<Entry> => {
|
|
149
|
-
const code = `${subModel.code}`;
|
|
150
|
-
let topicSubModel: Entry = await getEntryByID(code, "topicSubModel");
|
|
151
|
-
|
|
152
|
-
const topicSubModelData: CreateEntryProps = await getTopicSubModelData(
|
|
153
|
-
subModel,
|
|
154
|
-
topicSubModel
|
|
155
|
-
);
|
|
156
|
-
if (topicSubModel) {
|
|
157
|
-
log(`The topicSubModel ${code} already exists. Updating...`);
|
|
158
|
-
topicSubModel = await updateEntry(
|
|
159
|
-
topicSubModel,
|
|
160
|
-
topicSubModelData,
|
|
161
|
-
topicSubModel.isPublished()
|
|
162
|
-
);
|
|
163
|
-
} else {
|
|
164
|
-
log(`The topicSubModel ${code} not exists. Creating...`);
|
|
165
|
-
topicSubModel = await createEntryWithId(
|
|
166
|
-
"topicSubModel",
|
|
167
|
-
code,
|
|
168
|
-
topicSubModelData
|
|
169
|
-
);
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
const defaultEnvironmentLocaleCode = await getEnvironmentDefaultLocaleCode();
|
|
173
|
-
const topicModelId =
|
|
174
|
-
topicSubModel?.fields?.parentModel?.[defaultEnvironmentLocaleCode]?.sys?.id;
|
|
175
|
-
if (topicModelId) {
|
|
176
|
-
await addSubModelToModel(topicSubModel.sys.id, topicModelId);
|
|
177
|
-
} else {
|
|
178
|
-
log("No parent model found", "WARN");
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
return topicSubModel;
|
|
182
|
-
};
|
|
183
|
-
|
|
184
|
-
const addSubModelToModel = async (
|
|
185
|
-
topicSubModelId: string,
|
|
186
|
-
topicModelId: string
|
|
187
|
-
) => {
|
|
188
|
-
log(
|
|
189
|
-
`addSubModelToModel - topicSubModelId:${topicSubModelId}, topicModelId: ${topicModelId} `
|
|
190
|
-
);
|
|
191
|
-
let topicModel = await getEntryByID(topicModelId, "topicModel");
|
|
192
|
-
const data: CreateEntryProps = {
|
|
193
|
-
fields: topicModel?.fields || {},
|
|
194
|
-
};
|
|
195
|
-
|
|
196
|
-
data.fields = await addToRelationFields(
|
|
197
|
-
topicModel,
|
|
198
|
-
"subModels",
|
|
199
|
-
topicSubModelId,
|
|
200
|
-
true
|
|
201
|
-
);
|
|
202
|
-
|
|
203
|
-
topicModel = await updateEntry(topicModel, data, topicModel.isPublished());
|
|
204
|
-
};
|
|
205
|
-
|
|
206
|
-
/**
|
|
207
|
-
* Import subModel
|
|
208
|
-
*
|
|
209
|
-
* @param {number} offset Default 0
|
|
210
|
-
* @param {number} limit Range 0-50. Default 50
|
|
211
|
-
* @returns {object}
|
|
212
|
-
*/
|
|
213
|
-
export const importSubModels = async (
|
|
214
|
-
offset: number = 0,
|
|
215
|
-
limit: number = 50
|
|
216
|
-
): Promise<PaginationResults> => {
|
|
217
|
-
const timeStart = new Date();
|
|
218
|
-
log(`importSubModels - offset: ${offset}, limit: ${limit}`, "INFO");
|
|
219
|
-
const subModels = await getOtherCatalogData<CollectionSubModels>(
|
|
220
|
-
"submodels",
|
|
221
|
-
offset,
|
|
222
|
-
limit
|
|
223
|
-
);
|
|
224
|
-
|
|
225
|
-
const total = subModels?.pagedCollection?.length || 0;
|
|
226
|
-
|
|
227
|
-
if (subModels?.pagedCollection?.length) {
|
|
228
|
-
log(`Founded ${total} subModels`);
|
|
229
|
-
let count = offset;
|
|
230
|
-
let current: number = 0;
|
|
231
|
-
for (const subModel of subModels.pagedCollection) {
|
|
232
|
-
log(`${++count} of ${subModels.totalCount}`);
|
|
233
|
-
|
|
234
|
-
await importSubModel(subModel);
|
|
235
|
-
|
|
236
|
-
if (serverUtils) {
|
|
237
|
-
serverUtils.log(subModel.code);
|
|
238
|
-
const progress = Math.floor(
|
|
239
|
-
(++current / subModels.pagedCollection.length) * 100
|
|
240
|
-
);
|
|
241
|
-
serverUtils.updateProgress(progress);
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
// Max 7 calls per seconds
|
|
245
|
-
if (count % 2 === 0 && count < subModels.totalCount) {
|
|
246
|
-
await sleep(1000);
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
const nextOffset = Number(offset) + Number(limit);
|
|
252
|
-
const timeEnd = new Date();
|
|
253
|
-
const seconds = secondBetweenTwoDate(timeStart, timeEnd);
|
|
254
|
-
log(`Request time: ${seconds} seconds`);
|
|
255
|
-
|
|
256
|
-
return {
|
|
257
|
-
offset: nextOffset,
|
|
258
|
-
limit: Number(limit),
|
|
259
|
-
completed: nextOffset >= subModels.totalCount,
|
|
260
|
-
total: subModels.totalCount,
|
|
261
|
-
};
|
|
262
|
-
};
|
package/src/pim/request.ts
DELETED
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import { config, checkConfig } from "./config";
|
|
2
|
-
import axios, { AxiosRequestConfig } from "@atoms-studio/axios";
|
|
3
|
-
import https from "https";
|
|
4
|
-
|
|
5
|
-
export let baseRequestConfig: AxiosRequestConfig | null = null;
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* @see https://github.com/axios/axios#request-config
|
|
9
|
-
*/
|
|
10
|
-
export const initBaseRequest = (): void => {
|
|
11
|
-
checkConfig();
|
|
12
|
-
|
|
13
|
-
baseRequestConfig = {
|
|
14
|
-
baseURL: config.baseURL,
|
|
15
|
-
timeout: config.timeout,
|
|
16
|
-
params: {},
|
|
17
|
-
headers: {
|
|
18
|
-
Accept: "application/json",
|
|
19
|
-
"Content-Type": "application/json;charset=utf-8",
|
|
20
|
-
},
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
// Ignore specific SSL errors
|
|
24
|
-
if (!config.sslverify) {
|
|
25
|
-
const agent = new https.Agent({
|
|
26
|
-
rejectUnauthorized: false,
|
|
27
|
-
});
|
|
28
|
-
baseRequestConfig.httpsAgent = agent;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
// Auth
|
|
32
|
-
if (config.username && config.password) {
|
|
33
|
-
baseRequestConfig.auth = {
|
|
34
|
-
username: config.username,
|
|
35
|
-
password: config.password,
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
};
|
|
39
|
-
|
|
40
|
-
export const resetBaseRequest = (): void => {
|
|
41
|
-
baseRequestConfig = null;
|
|
42
|
-
};
|
|
43
|
-
|
|
44
|
-
export const getRequest = (
|
|
45
|
-
url: string,
|
|
46
|
-
opts: Record<string, any> & Partial<AxiosRequestConfig> = {}
|
|
47
|
-
): Promise<any> => {
|
|
48
|
-
if (!baseRequestConfig) {
|
|
49
|
-
initBaseRequest();
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
const defaultOpts = { ...baseRequestConfig };
|
|
53
|
-
|
|
54
|
-
Object.entries(defaultOpts).forEach(([key, value]) => {
|
|
55
|
-
if (!opts[key]) {
|
|
56
|
-
opts[key] = value;
|
|
57
|
-
}
|
|
58
|
-
});
|
|
59
|
-
|
|
60
|
-
return axios.get(url, opts);
|
|
61
|
-
};
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
export interface AllProductsEntry {
|
|
2
|
-
code: string;
|
|
3
|
-
name: string;
|
|
4
|
-
webNaming: string;
|
|
5
|
-
productGroup: ProductGroup;
|
|
6
|
-
productStatus: ProductStatus;
|
|
7
|
-
lastModified: LastModified;
|
|
8
|
-
catalogs?: CatalogsEntity[] | null;
|
|
9
|
-
}
|
|
10
|
-
export interface ProductGroup {
|
|
11
|
-
code: string;
|
|
12
|
-
name: string;
|
|
13
|
-
priority: number;
|
|
14
|
-
}
|
|
15
|
-
export interface ProductStatus {
|
|
16
|
-
code: string;
|
|
17
|
-
value_en: string;
|
|
18
|
-
value_it: string;
|
|
19
|
-
value_es: string;
|
|
20
|
-
value_de: string;
|
|
21
|
-
value_fr: string;
|
|
22
|
-
value_sv: string;
|
|
23
|
-
value_no: string;
|
|
24
|
-
value_da: string;
|
|
25
|
-
value_ru: string;
|
|
26
|
-
othersData: OthersData;
|
|
27
|
-
}
|
|
28
|
-
export interface OthersData {}
|
|
29
|
-
export interface LastModified {
|
|
30
|
-
year: number;
|
|
31
|
-
month: number;
|
|
32
|
-
dayOfMonth: number;
|
|
33
|
-
hourOfDay: number;
|
|
34
|
-
minute: number;
|
|
35
|
-
second: number;
|
|
36
|
-
}
|
|
37
|
-
export interface CatalogsEntity {
|
|
38
|
-
catalogCode?: string | null;
|
|
39
|
-
categoryCode?: string | null;
|
|
40
|
-
subFamilyCode?: string | null;
|
|
41
|
-
}
|
package/src/resources/Audit.ts
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
type AuditCatalog = {
|
|
2
|
-
where: string;
|
|
3
|
-
catalogCode?: string;
|
|
4
|
-
categoryCode?: string;
|
|
5
|
-
subfamilyCode?: string;
|
|
6
|
-
models?: string;
|
|
7
|
-
subModels?: string;
|
|
8
|
-
codes?: string;
|
|
9
|
-
};
|
|
10
|
-
export interface Audit {
|
|
11
|
-
what: string;
|
|
12
|
-
when: When;
|
|
13
|
-
product: string;
|
|
14
|
-
upgradeProduct?: string;
|
|
15
|
-
catalogs: AuditCatalog[];
|
|
16
|
-
}
|
|
17
|
-
export interface When {
|
|
18
|
-
year: number;
|
|
19
|
-
month: number;
|
|
20
|
-
dayOfMonth: number;
|
|
21
|
-
hourOfDay: number;
|
|
22
|
-
minute: number;
|
|
23
|
-
second: number;
|
|
24
|
-
}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
export interface CatalogDetails {
|
|
2
|
-
data: Data;
|
|
3
|
-
categories?: CategoriesEntity[] | null;
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
export interface Data {
|
|
7
|
-
code: string;
|
|
8
|
-
value_en: string;
|
|
9
|
-
value_it: string;
|
|
10
|
-
value_es: string;
|
|
11
|
-
value_de: string;
|
|
12
|
-
value_fr: string;
|
|
13
|
-
value_sv: string;
|
|
14
|
-
value_no: string;
|
|
15
|
-
value_da: string;
|
|
16
|
-
value_ru: string;
|
|
17
|
-
othersData: OthersData;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export interface OthersData {}
|
|
21
|
-
|
|
22
|
-
export interface CategoriesEntity {
|
|
23
|
-
data: Data;
|
|
24
|
-
subfamilies?: (SubfamiliesEntity | null)[] | null;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
export interface SubfamiliesEntity {
|
|
28
|
-
data: FamilyData;
|
|
29
|
-
childfamilies?: (ChildfamiliesEntity | null)[] | null;
|
|
30
|
-
designers?: null[] | null;
|
|
31
|
-
parentFamily?: FamilyData | null;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
export interface FamilyData {
|
|
35
|
-
code: string;
|
|
36
|
-
value_en: string;
|
|
37
|
-
value_en_US?: string | null;
|
|
38
|
-
value_it: string;
|
|
39
|
-
value_es: string;
|
|
40
|
-
value_de: string;
|
|
41
|
-
value_fr: string;
|
|
42
|
-
value_sv: string;
|
|
43
|
-
value_no: string;
|
|
44
|
-
value_da: string;
|
|
45
|
-
value_ru: string;
|
|
46
|
-
othersData: OthersData;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
export interface ChildfamiliesEntity {
|
|
50
|
-
data: Data;
|
|
51
|
-
}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
export interface CollectionModels {
|
|
2
|
-
totalCount: number;
|
|
3
|
-
pageSize: number;
|
|
4
|
-
pageOffset: number;
|
|
5
|
-
pagedCollection?: PagedCollectionEntity[] | null;
|
|
6
|
-
}
|
|
7
|
-
export interface PagedCollectionEntity {
|
|
8
|
-
designers: Data[];
|
|
9
|
-
relatedProducts?: string[] | null;
|
|
10
|
-
data: Data;
|
|
11
|
-
priority?: number | null;
|
|
12
|
-
subFamilyCode: string;
|
|
13
|
-
productLineCode: string;
|
|
14
|
-
code: string;
|
|
15
|
-
othersData: OthersData;
|
|
16
|
-
description1_en?: string;
|
|
17
|
-
description1_en_us?: string;
|
|
18
|
-
description1_it?: string;
|
|
19
|
-
description1_es?: string;
|
|
20
|
-
description1_de?: string;
|
|
21
|
-
description1_fr?: string;
|
|
22
|
-
description1_sv?: string;
|
|
23
|
-
description1_no?: string;
|
|
24
|
-
description1_da?: string;
|
|
25
|
-
description1_ru?: string;
|
|
26
|
-
destinations?: string[];
|
|
27
|
-
}
|
|
28
|
-
export interface Data {
|
|
29
|
-
code: string;
|
|
30
|
-
value_en: string;
|
|
31
|
-
value_en_US: string;
|
|
32
|
-
value_it: string;
|
|
33
|
-
value_es: string;
|
|
34
|
-
value_de: string;
|
|
35
|
-
value_fr: string;
|
|
36
|
-
value_sv: string;
|
|
37
|
-
value_no: string;
|
|
38
|
-
value_da: string;
|
|
39
|
-
value_ru: string;
|
|
40
|
-
othersData: OthersData;
|
|
41
|
-
}
|
|
42
|
-
export interface OthersData {}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
export interface CollectionSubFamilies {
|
|
2
|
-
totalCount: number;
|
|
3
|
-
pageSize: number;
|
|
4
|
-
pageOffset: number;
|
|
5
|
-
pagedCollection?: PagedCollectionEntity[] | null;
|
|
6
|
-
}
|
|
7
|
-
export interface PagedCollectionEntity {
|
|
8
|
-
data: GenericData;
|
|
9
|
-
priority?: number;
|
|
10
|
-
catalogCode: string;
|
|
11
|
-
categoryCode: string;
|
|
12
|
-
parentFamily: ParentFamily;
|
|
13
|
-
designers?: GenericData[] | null;
|
|
14
|
-
relatedProducts?: string[] | null;
|
|
15
|
-
description1_en?: string;
|
|
16
|
-
description1_en_us?: string;
|
|
17
|
-
description1_it?: string;
|
|
18
|
-
description1_es?: string;
|
|
19
|
-
description1_de?: string;
|
|
20
|
-
description1_fr?: string;
|
|
21
|
-
description1_sv?: string;
|
|
22
|
-
description1_no?: string;
|
|
23
|
-
description1_da?: string;
|
|
24
|
-
description1_ru?: string;
|
|
25
|
-
destinations?: string[];
|
|
26
|
-
}
|
|
27
|
-
export interface GenericData {
|
|
28
|
-
code: string;
|
|
29
|
-
value_en: string;
|
|
30
|
-
value_en_US?: string;
|
|
31
|
-
value_it: string;
|
|
32
|
-
value_es: string;
|
|
33
|
-
value_de: string;
|
|
34
|
-
value_fr: string;
|
|
35
|
-
value_sv: string;
|
|
36
|
-
value_no: string;
|
|
37
|
-
value_da: string;
|
|
38
|
-
value_ru: string;
|
|
39
|
-
othersData: OthersData;
|
|
40
|
-
}
|
|
41
|
-
export interface OthersData {}
|
|
42
|
-
export interface ParentFamily {
|
|
43
|
-
data: GenericData;
|
|
44
|
-
designers?: GenericData[] | null;
|
|
45
|
-
}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
export interface CollectionSubModels {
|
|
2
|
-
totalCount: number;
|
|
3
|
-
pageSize: number;
|
|
4
|
-
pageOffset: number;
|
|
5
|
-
pagedCollection?: PagedCollectionEntity[] | null;
|
|
6
|
-
}
|
|
7
|
-
export interface PagedCollectionEntity {
|
|
8
|
-
relatedProducts?: string[] | null;
|
|
9
|
-
data: Data;
|
|
10
|
-
priority: number;
|
|
11
|
-
subFamilyCode: string;
|
|
12
|
-
productLineCode: string;
|
|
13
|
-
parentModel: ParentModel;
|
|
14
|
-
code: string;
|
|
15
|
-
othersData: OthersData;
|
|
16
|
-
destinations?: string[];
|
|
17
|
-
}
|
|
18
|
-
export interface Data {
|
|
19
|
-
code: string;
|
|
20
|
-
value_en: string;
|
|
21
|
-
value_en_US: string;
|
|
22
|
-
value_it: string;
|
|
23
|
-
value_es: string;
|
|
24
|
-
value_de: string;
|
|
25
|
-
value_fr: string;
|
|
26
|
-
value_sv: string;
|
|
27
|
-
value_no: string;
|
|
28
|
-
value_da: string;
|
|
29
|
-
value_ru: string;
|
|
30
|
-
othersData: OthersData;
|
|
31
|
-
}
|
|
32
|
-
export interface OthersData {}
|
|
33
|
-
export interface ParentModel {
|
|
34
|
-
code: string;
|
|
35
|
-
othersData: OthersData;
|
|
36
|
-
}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
export interface DProductSubLine {
|
|
2
|
-
code: string;
|
|
3
|
-
image?: null;
|
|
4
|
-
imageAlternative?: null;
|
|
5
|
-
value_en: string;
|
|
6
|
-
value_en_US: string;
|
|
7
|
-
value_it: string;
|
|
8
|
-
value_es: string;
|
|
9
|
-
value_de: string;
|
|
10
|
-
value_fr: string;
|
|
11
|
-
value_sv: string;
|
|
12
|
-
value_no: string;
|
|
13
|
-
value_da: string;
|
|
14
|
-
value_ru: string;
|
|
15
|
-
othersData: OthersData;
|
|
16
|
-
}
|
|
17
|
-
export interface OthersData {
|
|
18
|
-
productLine: ProductLine;
|
|
19
|
-
}
|
|
20
|
-
export interface ProductLine {
|
|
21
|
-
code: string;
|
|
22
|
-
image?: null;
|
|
23
|
-
imageAlternative?: null;
|
|
24
|
-
value_en: string;
|
|
25
|
-
value_it: string;
|
|
26
|
-
value_es: string;
|
|
27
|
-
value_de: string;
|
|
28
|
-
value_fr: string;
|
|
29
|
-
value_sv: string;
|
|
30
|
-
value_no: string;
|
|
31
|
-
value_da: string;
|
|
32
|
-
value_ru: string;
|
|
33
|
-
value_en_US?: null;
|
|
34
|
-
}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
export interface FamilyDetails {
|
|
2
|
-
data: Data;
|
|
3
|
-
priority?: number;
|
|
4
|
-
description1_en?: string;
|
|
5
|
-
description1_en_us?: string;
|
|
6
|
-
description1_it?: string;
|
|
7
|
-
description1_es?: string;
|
|
8
|
-
description1_de?: string;
|
|
9
|
-
description1_fr?: string;
|
|
10
|
-
description1_sv?: string;
|
|
11
|
-
description1_no?: string;
|
|
12
|
-
description1_da?: string;
|
|
13
|
-
description1_ru?: string;
|
|
14
|
-
designers?: Data[] | null;
|
|
15
|
-
destinations?: string[];
|
|
16
|
-
}
|
|
17
|
-
export interface Data {
|
|
18
|
-
code: string;
|
|
19
|
-
value_en: string;
|
|
20
|
-
value_en_US: string;
|
|
21
|
-
value_it: string;
|
|
22
|
-
value_es: string;
|
|
23
|
-
value_de: string;
|
|
24
|
-
value_fr: string;
|
|
25
|
-
value_sv: string;
|
|
26
|
-
value_no: string;
|
|
27
|
-
value_da: string;
|
|
28
|
-
value_ru: string;
|
|
29
|
-
othersData: OthersData;
|
|
30
|
-
}
|
|
31
|
-
export interface OthersData {}
|