pim-import 5.0.1 → 5.0.3

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.
Files changed (249) hide show
  1. package/dist/algolia/clean.js +0 -1
  2. package/dist/algolia/config.js +0 -1
  3. package/dist/algolia/downloads.js +0 -1
  4. package/dist/algolia/families.js +0 -1
  5. package/dist/algolia/inspirations.js +0 -1
  6. package/dist/algolia/models.js +0 -1
  7. package/dist/algolia/news.js +0 -1
  8. package/dist/algolia/pressRelease.js +0 -1
  9. package/dist/algolia/pressReview.js +0 -1
  10. package/dist/algolia/products.js +0 -1
  11. package/dist/algolia/projects.js +0 -1
  12. package/dist/algolia/stories.js +0 -1
  13. package/dist/algolia/subFamilies.js +0 -1
  14. package/dist/algolia/subModels.js +0 -1
  15. package/dist/browser.js +0 -1
  16. package/dist/downloads/classes/manageEntry.js +0 -1
  17. package/dist/downloads/import.js +0 -1
  18. package/dist/index.js +0 -1
  19. package/dist/libs/contentful-cda.js +0 -1
  20. package/dist/libs/contentful.js +0 -1
  21. package/dist/libs/imgix.js +0 -1
  22. package/dist/libs/logs.js +0 -1
  23. package/dist/libs/netlify.js +0 -1
  24. package/dist/libs/notifications.js +0 -1
  25. package/dist/libs/pdf.js +0 -1
  26. package/dist/libs/s3.js +0 -1
  27. package/dist/libs/sentry.js +0 -1
  28. package/dist/pim/config.js +0 -1
  29. package/dist/pim/endpoints.js +0 -1
  30. package/dist/pim/methods/bulkPublish.js +0 -1
  31. package/dist/pim/methods/catalogs.js +0 -1
  32. package/dist/pim/methods/checkTopicDraftAndPagePublished.js +0 -1
  33. package/dist/pim/methods/designers.js +0 -1
  34. package/dist/pim/methods/dictionary.js +0 -1
  35. package/dist/pim/methods/families.js +0 -1
  36. package/dist/pim/methods/latestProducts.js +0 -1
  37. package/dist/pim/methods/migrateEntryFields.js +0 -1
  38. package/dist/pim/methods/models.js +0 -1
  39. package/dist/pim/methods/pages/catalogs.js +0 -1
  40. package/dist/pim/methods/pages/families.js +0 -1
  41. package/dist/pim/methods/pages/subfamilies.js +0 -1
  42. package/dist/pim/methods/products.js +0 -1
  43. package/dist/pim/methods/subfamilies.js +0 -1
  44. package/dist/pim/methods/submodels.js +0 -1
  45. package/dist/pim/request.js +0 -1
  46. package/dist/resources/AllProducts.js +0 -1
  47. package/dist/resources/Audit.js +0 -1
  48. package/dist/resources/CatalogDetails.js +0 -1
  49. package/dist/resources/CollectionModels.js +0 -1
  50. package/dist/resources/CollectionSubFamilies.js +0 -1
  51. package/dist/resources/CollectionSubModels.js +0 -1
  52. package/dist/resources/DProductSubLine.js +0 -1
  53. package/dist/resources/FamilyDetails.js +0 -1
  54. package/dist/resources/ProductDetails.js +0 -1
  55. package/dist/resources/ProductRelation.js +0 -1
  56. package/dist/resources/cfFields.js +0 -1
  57. package/dist/types.js +0 -1
  58. package/dist/utils.js +0 -1
  59. package/package.json +7 -2
  60. package/.env.example +0 -45
  61. package/.nvmrc +0 -1
  62. package/.vscode/settings.json +0 -21
  63. package/dist/algolia/clean.js.map +0 -1
  64. package/dist/algolia/config.js.map +0 -1
  65. package/dist/algolia/downloads.js.map +0 -1
  66. package/dist/algolia/families.js.map +0 -1
  67. package/dist/algolia/inspirations.js.map +0 -1
  68. package/dist/algolia/models.js.map +0 -1
  69. package/dist/algolia/news.js.map +0 -1
  70. package/dist/algolia/pressRelease.js.map +0 -1
  71. package/dist/algolia/pressReview.js.map +0 -1
  72. package/dist/algolia/products.js.map +0 -1
  73. package/dist/algolia/projects.js.map +0 -1
  74. package/dist/algolia/stories.js.map +0 -1
  75. package/dist/algolia/subFamilies.js.map +0 -1
  76. package/dist/algolia/subModels.js.map +0 -1
  77. package/dist/browser.js.map +0 -1
  78. package/dist/downloads/classes/manageEntry.js.map +0 -1
  79. package/dist/downloads/import.js.map +0 -1
  80. package/dist/index.js.map +0 -1
  81. package/dist/libs/contentful-cda.js.map +0 -1
  82. package/dist/libs/contentful.js.map +0 -1
  83. package/dist/libs/imgix.js.map +0 -1
  84. package/dist/libs/logs.js.map +0 -1
  85. package/dist/libs/netlify.js.map +0 -1
  86. package/dist/libs/notifications.js.map +0 -1
  87. package/dist/libs/pdf.js.map +0 -1
  88. package/dist/libs/s3.js.map +0 -1
  89. package/dist/libs/sentry.js.map +0 -1
  90. package/dist/pim/config.js.map +0 -1
  91. package/dist/pim/endpoints.js.map +0 -1
  92. package/dist/pim/methods/bulkPublish.js.map +0 -1
  93. package/dist/pim/methods/catalogs.js.map +0 -1
  94. package/dist/pim/methods/checkTopicDraftAndPagePublished.js.map +0 -1
  95. package/dist/pim/methods/designers.js.map +0 -1
  96. package/dist/pim/methods/dictionary.js.map +0 -1
  97. package/dist/pim/methods/families.js.map +0 -1
  98. package/dist/pim/methods/latestProducts.js.map +0 -1
  99. package/dist/pim/methods/migrateEntryFields.js.map +0 -1
  100. package/dist/pim/methods/models.js.map +0 -1
  101. package/dist/pim/methods/pages/catalogs.js.map +0 -1
  102. package/dist/pim/methods/pages/families.js.map +0 -1
  103. package/dist/pim/methods/pages/subfamilies.js.map +0 -1
  104. package/dist/pim/methods/products.js.map +0 -1
  105. package/dist/pim/methods/subfamilies.js.map +0 -1
  106. package/dist/pim/methods/submodels.js.map +0 -1
  107. package/dist/pim/request.js.map +0 -1
  108. package/dist/resources/AllProducts.js.map +0 -1
  109. package/dist/resources/Audit.js.map +0 -1
  110. package/dist/resources/CatalogDetails.js.map +0 -1
  111. package/dist/resources/CollectionModels.js.map +0 -1
  112. package/dist/resources/CollectionSubFamilies.js.map +0 -1
  113. package/dist/resources/CollectionSubModels.js.map +0 -1
  114. package/dist/resources/DProductSubLine.js.map +0 -1
  115. package/dist/resources/FamilyDetails.js.map +0 -1
  116. package/dist/resources/ProductDetails.js.map +0 -1
  117. package/dist/resources/ProductRelation.js.map +0 -1
  118. package/dist/resources/cfFields.js.map +0 -1
  119. package/dist/types.js.map +0 -1
  120. package/dist/utils.js.map +0 -1
  121. package/docs/import-data-from-the-dictionary.md +0 -83
  122. package/docs/import-products.md +0 -61
  123. package/docs/import-taxonomies-from-the-catalog.md +0 -60
  124. package/docs/settings.md +0 -47
  125. package/jest.config.js +0 -16
  126. package/local-fn/reindex.js +0 -182
  127. package/src/algolia/clean.ts +0 -164
  128. package/src/algolia/config.ts +0 -390
  129. package/src/algolia/downloads.ts +0 -346
  130. package/src/algolia/families.ts +0 -652
  131. package/src/algolia/inspirations.ts +0 -315
  132. package/src/algolia/models.ts +0 -589
  133. package/src/algolia/news.ts +0 -258
  134. package/src/algolia/pressRelease.ts +0 -255
  135. package/src/algolia/pressReview.ts +0 -247
  136. package/src/algolia/products.ts +0 -731
  137. package/src/algolia/projects.ts +0 -339
  138. package/src/algolia/stories.ts +0 -347
  139. package/src/algolia/subFamilies.ts +0 -709
  140. package/src/algolia/subModels.ts +0 -359
  141. package/src/browser.ts +0 -122
  142. package/src/downloads/classes/manageEntry.ts +0 -99
  143. package/src/downloads/csv/legal.csv +0 -5
  144. package/src/downloads/csv/products.csv +0 -373
  145. package/src/downloads/import.ts +0 -381
  146. package/src/index.ts +0 -140
  147. package/src/libs/contentful-cda.ts +0 -543
  148. package/src/libs/contentful.ts +0 -1453
  149. package/src/libs/imgix.ts +0 -297
  150. package/src/libs/logs.ts +0 -121
  151. package/src/libs/netlify.ts +0 -37
  152. package/src/libs/notifications.ts +0 -104
  153. package/src/libs/pdf.ts +0 -107
  154. package/src/libs/s3.ts +0 -305
  155. package/src/libs/sentry.ts +0 -33
  156. package/src/pim/config.ts +0 -84
  157. package/src/pim/data/productFields.json +0 -1178
  158. package/src/pim/endpoints.ts +0 -364
  159. package/src/pim/methods/bulkPublish.ts +0 -266
  160. package/src/pim/methods/catalogs.ts +0 -586
  161. package/src/pim/methods/checkTopicDraftAndPagePublished.ts +0 -70
  162. package/src/pim/methods/designers.ts +0 -128
  163. package/src/pim/methods/dictionary.ts +0 -611
  164. package/src/pim/methods/families.ts +0 -345
  165. package/src/pim/methods/latestProducts.ts +0 -70
  166. package/src/pim/methods/migrateEntryFields.ts +0 -99
  167. package/src/pim/methods/models.ts +0 -349
  168. package/src/pim/methods/pages/catalogs.ts +0 -28
  169. package/src/pim/methods/pages/families.ts +0 -50
  170. package/src/pim/methods/pages/subfamilies.ts +0 -98
  171. package/src/pim/methods/products.ts +0 -3297
  172. package/src/pim/methods/subfamilies.ts +0 -706
  173. package/src/pim/methods/submodels.ts +0 -262
  174. package/src/pim/request.ts +0 -61
  175. package/src/resources/AllProducts.ts +0 -41
  176. package/src/resources/Audit.ts +0 -24
  177. package/src/resources/CatalogDetails.ts +0 -51
  178. package/src/resources/CollectionModels.ts +0 -42
  179. package/src/resources/CollectionSubFamilies.ts +0 -45
  180. package/src/resources/CollectionSubModels.ts +0 -36
  181. package/src/resources/DProductSubLine.ts +0 -34
  182. package/src/resources/FamilyDetails.ts +0 -31
  183. package/src/resources/ProductDetails.ts +0 -352
  184. package/src/resources/ProductRelation.ts +0 -24
  185. package/src/resources/cfFields.ts +0 -8
  186. package/src/types.ts +0 -268
  187. package/src/utils.ts +0 -553
  188. package/tsconfig.json +0 -93
  189. package/tslint.json +0 -22
  190. package/types/libs/puppeteer.d.ts +0 -17
  191. package/types/pim/methods/checkIp.d.ts +0 -1
  192. /package/{types → dist}/algolia/clean.d.ts +0 -0
  193. /package/{types → dist}/algolia/config.d.ts +0 -0
  194. /package/{types → dist}/algolia/downloads.d.ts +0 -0
  195. /package/{types → dist}/algolia/families.d.ts +0 -0
  196. /package/{types → dist}/algolia/inspirations.d.ts +0 -0
  197. /package/{types → dist}/algolia/models.d.ts +0 -0
  198. /package/{types → dist}/algolia/news.d.ts +0 -0
  199. /package/{types → dist}/algolia/pressRelease.d.ts +0 -0
  200. /package/{types → dist}/algolia/pressReview.d.ts +0 -0
  201. /package/{types → dist}/algolia/products.d.ts +0 -0
  202. /package/{types → dist}/algolia/projects.d.ts +0 -0
  203. /package/{types → dist}/algolia/stories.d.ts +0 -0
  204. /package/{types → dist}/algolia/subFamilies.d.ts +0 -0
  205. /package/{types → dist}/algolia/subModels.d.ts +0 -0
  206. /package/{types → dist}/browser.d.ts +0 -0
  207. /package/{types → dist}/downloads/classes/manageEntry.d.ts +0 -0
  208. /package/{types → dist}/downloads/import.d.ts +0 -0
  209. /package/{types → dist}/index.d.ts +0 -0
  210. /package/{types → dist}/libs/contentful-cda.d.ts +0 -0
  211. /package/{types → dist}/libs/contentful.d.ts +0 -0
  212. /package/{types → dist}/libs/imgix.d.ts +0 -0
  213. /package/{types → dist}/libs/logs.d.ts +0 -0
  214. /package/{types → dist}/libs/netlify.d.ts +0 -0
  215. /package/{types → dist}/libs/notifications.d.ts +0 -0
  216. /package/{types → dist}/libs/pdf.d.ts +0 -0
  217. /package/{types → dist}/libs/s3.d.ts +0 -0
  218. /package/{types → dist}/libs/sentry.d.ts +0 -0
  219. /package/{types → dist}/pim/config.d.ts +0 -0
  220. /package/{types → dist}/pim/endpoints.d.ts +0 -0
  221. /package/{types → dist}/pim/methods/bulkPublish.d.ts +0 -0
  222. /package/{types → dist}/pim/methods/catalogs.d.ts +0 -0
  223. /package/{types → dist}/pim/methods/checkTopicDraftAndPagePublished.d.ts +0 -0
  224. /package/{types → dist}/pim/methods/designers.d.ts +0 -0
  225. /package/{types → dist}/pim/methods/dictionary.d.ts +0 -0
  226. /package/{types → dist}/pim/methods/families.d.ts +0 -0
  227. /package/{types → dist}/pim/methods/latestProducts.d.ts +0 -0
  228. /package/{types → dist}/pim/methods/migrateEntryFields.d.ts +0 -0
  229. /package/{types → dist}/pim/methods/models.d.ts +0 -0
  230. /package/{types → dist}/pim/methods/pages/catalogs.d.ts +0 -0
  231. /package/{types → dist}/pim/methods/pages/families.d.ts +0 -0
  232. /package/{types → dist}/pim/methods/pages/subfamilies.d.ts +0 -0
  233. /package/{types → dist}/pim/methods/products.d.ts +0 -0
  234. /package/{types → dist}/pim/methods/subfamilies.d.ts +0 -0
  235. /package/{types → dist}/pim/methods/submodels.d.ts +0 -0
  236. /package/{types → dist}/pim/request.d.ts +0 -0
  237. /package/{types → dist}/resources/AllProducts.d.ts +0 -0
  238. /package/{types → dist}/resources/Audit.d.ts +0 -0
  239. /package/{types → dist}/resources/CatalogDetails.d.ts +0 -0
  240. /package/{types → dist}/resources/CollectionModels.d.ts +0 -0
  241. /package/{types → dist}/resources/CollectionSubFamilies.d.ts +0 -0
  242. /package/{types → dist}/resources/CollectionSubModels.d.ts +0 -0
  243. /package/{types → dist}/resources/DProductSubLine.d.ts +0 -0
  244. /package/{types → dist}/resources/FamilyDetails.d.ts +0 -0
  245. /package/{types → dist}/resources/ProductDetails.d.ts +0 -0
  246. /package/{types → dist}/resources/ProductRelation.d.ts +0 -0
  247. /package/{types → dist}/resources/cfFields.d.ts +0 -0
  248. /package/{types → dist}/types.d.ts +0 -0
  249. /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
- };