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.
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 -46
  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,589 +0,0 @@
1
- /**
2
- * Model index
3
- */
4
- import {
5
- getClient,
6
- getEnvironmentDefaultLocaleCode,
7
- getEntryByID,
8
- getAllEntries,
9
- getTopicDetails,
10
- } from "../libs/contentful-cda";
11
- import {
12
- CfLocalizedEntryField,
13
- TopicDetailsResponse,
14
- AlgoliaPaginateRecords,
15
- AvailableCatalogs,
16
- WrapperImageFields,
17
- } from "../types";
18
- import { log, serverUtils } from "../libs/logs";
19
- import { getIndex, AvailableIndicesKey, removeIndexObject } from "./config";
20
- import type { Entry } from "contentful-management/dist/typings/entities/entry";
21
- import {
22
- getLocalISOTime,
23
- secondBetweenTwoDate,
24
- capitalizeFirstLetter,
25
- keysToLowerCase,
26
- getAllTranslations,
27
- addProductFieldValueCodesByPimDetails,
28
- getCertificationFilters,
29
- } from "../utils";
30
- import { getWrapperImgixFields } from "../libs/imgix";
31
-
32
- const indexKey: AvailableIndicesKey = "models";
33
- const topicModelSelect =
34
- "fields.name,fields.code,fields.description,fields.thumbnailImgix,fields.productFieldFilter,fields.productLine,fields.catalog,fields.subFamily,fields.priority,fields.designer";
35
-
36
- /**
37
- *
38
- * Singolo record
39
- * - names
40
- * - code
41
- * - description - se conincide con l'autodescription, capire come generarla
42
- * - thumbnailImgix
43
- * - productFieldFilter
44
- * - productLine
45
- * - catalog
46
- * - subFamily
47
- * - priority
48
- * - colors - colori disponibili tra i prodotti associati a questo model
49
- */
50
- type AlgoliaModelRecord = {
51
- objectID: string;
52
- names?: CfLocalizedEntryField;
53
- code?: string;
54
- slugs?: {};
55
- isProtected?: boolean;
56
- description?: string;
57
- autodescription?: string;
58
- thumbnailImgix?: WrapperImageFields | {};
59
- productFieldFilter?: string;
60
- productFields?: string[];
61
- productLine?: TopicDetailsResponse;
62
- catalogs?: TopicDetailsResponse[];
63
- catalog?: TopicDetailsResponse;
64
- subFamily?: TopicDetailsResponse;
65
- isNew?: boolean;
66
- priority?: number;
67
- colors?: string[];
68
- designer?: TopicDetailsResponse;
69
- lastSyncDate?: string;
70
- destinations?: string[];
71
- };
72
-
73
- /**
74
- * TODO: Definire la logica con cui ottenere da più prodotti un unica description, non avendo più a disposizione la description dei gruppi un tempo fornita dall'apposito endpoint
75
- * @param productLineCode
76
- * @returns
77
- */
78
- const getModelAutodescription = async (productLineCode: string) => {
79
- // switch (productLineCode) {
80
- // case "PLINE6": // Soft Plate
81
- // case "PLINE5": // Light Bulb
82
- // case "PLINE3": // Driver
83
- // case "PLINE2": // Accessory
84
- // // post_content
85
- // break;
86
- // case "PLINE1": // Light Module
87
- // /*
88
- // let description;
89
- // if(electrical.lampCategories){
90
- // description += electrical.lampCategories
91
- // }
92
-
93
- // if(electrical.wPower && catalog === "ARCHITECTURAL"){
94
- // description += electrical.wPower
95
- // }
96
-
97
- // if(optical.numberOfHeads && optical.numberOfHeads > 1 && photometric.realNetFlow && catalog === "ARCHITECTURAL"){
98
- // description += optical.numberOfHeads . " x " . photometric.realNetFlow;
99
- // }else if(photometric.realNetFlow && catalog === "ARCHITECTURAL"){
100
- // description += photometric.realNetFlow;
101
- // }
102
-
103
- // if(photometric.temperatureColor){
104
- // description += photometric.temperatureColor;
105
- // }
106
-
107
- // if(photometric.cri){
108
- // description += "CRI " + photometric.cri;
109
- // }
110
-
111
- // if (photometric.beam0_180 && catalog == "OUTDOOR"){
112
- // description += "BEAM " + photometric.beam0_180;
113
- // }
114
- // */
115
- // break;
116
- // default:
117
- // let description;
118
- // if (physical.length) {
119
- // description += physical.length;
120
- // }
121
- // if (mountings) {
122
- // description += mountings;
123
- // }
124
-
125
- // // Profile and others
126
- // break;
127
- // }
128
-
129
- return (
130
- "TODO: definire autodescription model. ProductLine: " + productLineCode
131
- );
132
- };
133
-
134
- const isObjectToDelete = (
135
- object: any,
136
- defaultEnvironmentLocaleCode: string
137
- ) => {
138
- return (
139
- !object?.slugs?.[defaultEnvironmentLocaleCode] || !object?.subFamily?.code
140
- );
141
- };
142
-
143
- const getObject = async (
144
- topicModel: string | Entry
145
- ): Promise<AlgoliaModelRecord> => {
146
- const defaultEnvironmentLocaleCode = await getEnvironmentDefaultLocaleCode();
147
- const topicModelId =
148
- typeof topicModel === "string" ? topicModel : topicModel?.sys.id;
149
-
150
- if (!topicModelId) {
151
- log(`The topicModelId not found`, "ERROR");
152
- }
153
-
154
- log(`Get details of the ${topicModelId} topicModel`);
155
- const topicModelWithFields = await getEntryByID(topicModelId, "topicModel");
156
- if (!topicModelWithFields) {
157
- log(`The topicModel with id ${topicModelId} not found`, "WARN");
158
- return { objectID: topicModelId };
159
- }
160
-
161
- log(`Get model page details...`);
162
- const modelPageId = `${topicModelId}_PAGE`;
163
- const modelPage = await getEntryByID(
164
- modelPageId,
165
- "page",
166
- "fields.slug,fields.type,fields.protected"
167
- );
168
- const slugs = await getAllTranslations(modelPage?.fields?.slug || {});
169
- const isProtected =
170
- !!modelPage?.fields?.protected?.[defaultEnvironmentLocaleCode];
171
-
172
- log(`Get catalogs details...`);
173
- const catalogs = await getTopicDetails(
174
- topicModelWithFields,
175
- "catalog",
176
- "topicCatalog"
177
- );
178
- log(`${catalogs?.length} catalogs founded`);
179
- const catalog = catalogs?.[0];
180
- const catalogId = catalog?.code;
181
- if (!catalogId) {
182
- log(
183
- `catalog not found for the topicModel ${topicModelWithFields.sys.id}`,
184
- "WARN"
185
- );
186
- }
187
-
188
- log(`Get productLine details...`);
189
- const productLines = await getTopicDetails(
190
- topicModelWithFields,
191
- "productLine",
192
- "topicProductLine"
193
- );
194
- const productLine = productLines?.[0];
195
-
196
- log(`Get subFamily details...`);
197
- const subFamilies = await getTopicDetails(
198
- topicModelWithFields,
199
- "subFamily",
200
- "topicSubFamily",
201
- true,
202
- true,
203
- false,
204
- "thumbnailImgix"
205
- );
206
- const subFamily = subFamilies?.[0];
207
-
208
- log(`Get designer details...`);
209
- let designer;
210
- if (topicModelWithFields.fields.designer) {
211
- const designers = await getTopicDetails(
212
- topicModelWithFields,
213
- "designer",
214
- "topicDesigner",
215
- false,
216
- true,
217
- true
218
- );
219
- designer = designers?.[0];
220
- } else if (subFamily?.code) {
221
- const topicSubFamily = await getEntryByID(
222
- subFamily.code,
223
- "topicSubFamily",
224
- "fields.designer"
225
- );
226
- if (
227
- topicSubFamily?.fields?.designer?.[defaultEnvironmentLocaleCode]?.sys?.id
228
- ) {
229
- const designers = await getTopicDetails(
230
- topicSubFamily,
231
- "designer",
232
- "topicDesigner",
233
- false,
234
- true,
235
- true
236
- );
237
- designer = designers?.[0];
238
- }
239
- }
240
-
241
- log(`Get thumbnail imgix details...`);
242
- let thumbnailImgix = {};
243
- const thumbnailImgixWrapperImgixID =
244
- topicModelWithFields?.fields?.thumbnailImgix?.[defaultEnvironmentLocaleCode]
245
- ?.sys.id;
246
- if (thumbnailImgixWrapperImgixID) {
247
- thumbnailImgix = await getWrapperImgixFields(thumbnailImgixWrapperImgixID);
248
- } else {
249
- log(`No thumbnail imgix found`, "WARN");
250
- }
251
-
252
- log(`Get colors details...`);
253
- const colors: string[] = [];
254
- let productFields: any = {};
255
- productFields.availableTo = [];
256
- if (catalogId) {
257
- const topicProducts = await getAllEntries(
258
- "topicProduct",
259
- "sys,fields.productFields",
260
- `fields.models${capitalizeFirstLetter(catalogId)}.sys.id[in]`,
261
- topicModelWithFields.sys.id
262
- );
263
- topicProducts.forEach((topicProduct) => {
264
- const pimDetails =
265
- topicProduct?.fields?.productFields?.[defaultEnvironmentLocaleCode];
266
- const productColor = pimDetails?.mainColour?.code;
267
- if (productColor && colors.indexOf(productColor) === -1) {
268
- colors.push(productColor);
269
- }
270
-
271
- log(`Get productField details...`);
272
- productFields = addProductFieldValueCodesByPimDetails(
273
- pimDetails,
274
- productFields,
275
- "destinations"
276
- );
277
-
278
- // AVAILABLE TO
279
- if (
280
- pimDetails.visibleToShop &&
281
- !productFields.availableTo.includes("visibleToShop")
282
- ) {
283
- productFields.availableTo.push("visibleToShop");
284
- }
285
- if (
286
- pimDetails.quickDelivery &&
287
- !productFields.availableTo.includes("quickDelivery")
288
- ) {
289
- productFields.availableTo.push("quickDelivery");
290
- }
291
-
292
- // LOCATIONS [Has many]
293
- productFields = addProductFieldValueCodesByPimDetails(
294
- pimDetails,
295
- productFields,
296
- "locations"
297
- );
298
-
299
- // SHAPE
300
- productFields = addProductFieldValueCodesByPimDetails(
301
- pimDetails,
302
- productFields,
303
- "shapes",
304
- "physical"
305
- );
306
-
307
- // | PIM bucketColours [Has many]
308
- productFields = addProductFieldValueCodesByPimDetails(
309
- pimDetails,
310
- productFields,
311
- "bucketColours"
312
- );
313
-
314
- // LENGTH (MM)
315
- productFields = addProductFieldValueCodesByPimDetails(
316
- pimDetails,
317
- productFields,
318
- "length",
319
- "physical"
320
- );
321
-
322
- // LENGTH (IN)
323
- productFields = addProductFieldValueCodesByPimDetails(
324
- pimDetails,
325
- productFields,
326
- "length_us",
327
- "physical"
328
- );
329
-
330
- // MOUNTINGS [Has many]
331
- productFields = addProductFieldValueCodesByPimDetails(
332
- pimDetails,
333
- productFields,
334
- "mountings"
335
- );
336
-
337
- // ORINTATIONS [Has many]
338
- productFields = addProductFieldValueCodesByPimDetails(
339
- pimDetails,
340
- productFields,
341
- "orientations",
342
- "physical"
343
- );
344
-
345
- // OPTICAL TYPE [Only one]
346
- productFields = addProductFieldValueCodesByPimDetails(
347
- pimDetails,
348
- productFields,
349
- "opticalType",
350
- "optical"
351
- );
352
-
353
- // POWER (W) | PIM wPower
354
- productFields = addProductFieldValueCodesByPimDetails(
355
- pimDetails,
356
- productFields,
357
- "wPower",
358
- "electrical"
359
- );
360
-
361
- // System flux (lm) | PIM realNetFlow
362
- productFields = addProductFieldValueCodesByPimDetails(
363
- pimDetails,
364
- productFields,
365
- "realNetFlow",
366
- "photometric"
367
- );
368
-
369
- // CCT (K) [Only one] | PIM temperatureColor
370
- productFields = addProductFieldValueCodesByPimDetails(
371
- pimDetails,
372
- productFields,
373
- "temperatureColor",
374
- "photometric"
375
- );
376
-
377
- // CRI> [Only one]
378
- productFields = addProductFieldValueCodesByPimDetails(
379
- pimDetails,
380
- productFields,
381
- "cri",
382
- "photometric"
383
- );
384
-
385
- // DRIVER TYPE | PIM powerSupplyType [Has many]
386
- productFields = addProductFieldValueCodesByPimDetails(
387
- pimDetails,
388
- productFields,
389
- "powerSupplyType",
390
- "electrical"
391
- );
392
-
393
- // IP
394
- productFields = addProductFieldValueCodesByPimDetails(
395
- pimDetails,
396
- productFields,
397
- "ipRating",
398
- "marking"
399
- );
400
-
401
- // log(`Get certificationFilters details...`);
402
- productFields.certificationFilters = getCertificationFilters(pimDetails);
403
- });
404
-
405
- const allDestinations =
406
- topicModelWithFields?.fields?.destinations?.[
407
- defaultEnvironmentLocaleCode
408
- ] || [];
409
- productFields.totalProducts = {};
410
- for (const destination of allDestinations) {
411
- productFields.totalProducts[destination] = topicProducts.filter(
412
- (topicProductEntry) =>
413
- topicProductEntry?.fields?.productFields?.[
414
- defaultEnvironmentLocaleCode
415
- ]?.destinations?.find(
416
- (productDestination: any) => productDestination.code === destination
417
- )
418
- ).length;
419
- }
420
- } else {
421
- log(`I cannot get the colors because there is no catalog`, "WARN");
422
- }
423
-
424
- log(`Get autodescription details...`);
425
- const autodescription = await getModelAutodescription(productLine.code);
426
-
427
- /*
428
-
429
- * - names
430
- * - code
431
- * - description
432
- * - autodescription
433
- * - thumbnailImgix
434
- * - productFieldFilter
435
- * - productLine
436
- * - catalog
437
- * - subFamily
438
- * - priority
439
- * - colors - colori disponibili tra i prodotti associati a questo model
440
- */
441
- const record: AlgoliaModelRecord = {
442
- objectID: topicModelWithFields.sys.id,
443
- names: topicModelWithFields?.fields?.name
444
- ? keysToLowerCase(topicModelWithFields.fields.name)
445
- : {},
446
- code:
447
- topicModelWithFields?.fields?.code?.[defaultEnvironmentLocaleCode] || "",
448
- description: topicModelWithFields?.fields?.description || {},
449
- slugs,
450
- isProtected,
451
- autodescription,
452
- thumbnailImgix,
453
- productFieldFilter:
454
- topicModelWithFields?.fields?.productFieldFilter?.[
455
- defaultEnvironmentLocaleCode
456
- ] || "",
457
- productFields,
458
- productLine,
459
- catalogs,
460
- catalog,
461
- subFamily,
462
- colors,
463
- designer,
464
- isNew: topicModelWithFields?.fields?.isNew || false,
465
- priority:
466
- topicModelWithFields?.fields?.priority?.[defaultEnvironmentLocaleCode] ||
467
- 0,
468
- destinations:
469
- topicModelWithFields?.fields?.destinations?.[
470
- defaultEnvironmentLocaleCode
471
- ] || [],
472
- lastSyncDate: getLocalISOTime(),
473
- };
474
-
475
- return record;
476
- };
477
-
478
- export const reindexModel = async (topicModelId: string) => {
479
- const timeStart = new Date();
480
-
481
- log(`reindexModel - entryId: ${topicModelId} `);
482
-
483
- const defaultEnvironmentLocaleCode = await getEnvironmentDefaultLocaleCode();
484
- const object = await getObject(topicModelId);
485
-
486
- // Save record to Algolia
487
- const index = getIndex(indexKey);
488
- let record = null;
489
- if (!isObjectToDelete(object, defaultEnvironmentLocaleCode)) {
490
- log(`Save object`);
491
- record = await index.saveObject(object);
492
- } else {
493
- log(`Delete object`);
494
- record = await index.deleteObject(object.objectID);
495
- }
496
- const timeEnd = new Date();
497
- const seconds = secondBetweenTwoDate(timeStart, timeEnd);
498
- log(`Execution time: ${seconds} seconds`);
499
-
500
- return { ...record, ...object };
501
- };
502
-
503
- const getObjects = async (
504
- offset: number,
505
- limit: number,
506
- catalogCode?: AvailableCatalogs
507
- ): Promise<AlgoliaPaginateRecords> => {
508
- const client = await getClient();
509
-
510
- const opts: any = {
511
- content_type: "topicModel",
512
- limit,
513
- skip: offset,
514
- select: topicModelSelect,
515
- };
516
- if (catalogCode) {
517
- opts["fields.catalog.sys.id"] = catalogCode;
518
- }
519
- const { items, total } = await client.withAllLocales.getEntries(opts);
520
-
521
- const objects: AlgoliaModelRecord[] = [];
522
- let count: number = Number(offset);
523
- let current: number = 0;
524
- for (const topicModel of items) {
525
- log(`${++count} of ${total}`, "INFO");
526
- const timeStart = new Date();
527
- const record = await getObject(topicModel);
528
- const timeEnd = new Date();
529
- const seconds = secondBetweenTwoDate(timeStart, timeEnd);
530
- log(`Execution time: ${seconds} seconds`);
531
- objects.push(record);
532
- if (serverUtils) {
533
- serverUtils.log(topicModel.sys.id);
534
- const progress = Math.floor((++current / items.length) * 100);
535
- serverUtils.updateProgress(progress);
536
- }
537
- }
538
-
539
- return {
540
- objects,
541
- offset: Number(offset) + Number(limit),
542
- limit: Number(limit),
543
- completed: count >= total, // if is true the import is completed
544
- total,
545
- };
546
- };
547
-
548
- export const reindexModels = async (
549
- offset: number = 0,
550
- limit: number = 50,
551
- catalogCode?: AvailableCatalogs
552
- ) => {
553
- const timeStart = new Date();
554
- log(
555
- `reindexModels - offset: ${offset} limit: ${limit} catalogCode: ${catalogCode}`
556
- );
557
- const defaultEnvironmentLocaleCode = await getEnvironmentDefaultLocaleCode();
558
-
559
- const records = await getObjects(offset, limit, catalogCode);
560
- const objectsToSave = records.objects.filter(
561
- (object) => !isObjectToDelete(object, defaultEnvironmentLocaleCode)
562
- );
563
- const objectIdsToDelete = records.objects
564
- .filter((object) => isObjectToDelete(object, defaultEnvironmentLocaleCode))
565
- .map((object) => object.objectID);
566
-
567
- // Save records to Algolia
568
- const index = getIndex(indexKey);
569
- log(`Save ${objectsToSave.length} objects to ${index.indexName} index`);
570
- const savedObjectIDs = await index.saveObjects(objectsToSave);
571
- log(
572
- `Delete ${objectIdsToDelete.length} objects from ${index.indexName} index`
573
- );
574
- const deletedObjectIDs = await index.deleteObjects(objectIdsToDelete);
575
-
576
- const timeEnd = new Date();
577
- const seconds = secondBetweenTwoDate(timeStart, timeEnd);
578
- log(`Execution time: ${seconds} seconds`);
579
-
580
- return {
581
- ...records,
582
- savedObjectIDs: savedObjectIDs.objectIDs,
583
- deletedObjectIDs: deletedObjectIDs.objectIDs,
584
- };
585
- };
586
-
587
- export const removeModelObject = async (topicModelId: string) => {
588
- return removeIndexObject(topicModelId, indexKey);
589
- };