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,709 +0,0 @@
1
- /**
2
- * SubFamilies index
3
- */
4
- import {
5
- getClient,
6
- getEnvironmentDefaultLocaleCode,
7
- getEntryByID,
8
- getAllEntries,
9
- getTopicDetails,
10
- } from "../libs/contentful-cda";
11
- import { AlgoliaPaginateRecords, AvailableCatalogs } from "../types";
12
- import type { Entry } from "contentful-management/dist/typings/entities/entry";
13
- import { log, serverUtils } from "../libs/logs";
14
- import { getIndex, AvailableIndicesKey, removeIndexObject } from "./config";
15
- import {
16
- getLocalISOTime,
17
- sanitizeValue,
18
- secondBetweenTwoDate,
19
- addProductFieldValueCodesByPimDetails,
20
- getCertificationFilters,
21
- capitalizeFirstLetter,
22
- getAllTranslations,
23
- } from "../utils";
24
- import { getWrapperImgixFields } from "../libs/imgix";
25
- import { AlgoliaFamilyRecord, pageResponse } from "./families";
26
- import { getSubFamilyPageSlugWithDetails } from "../pim/methods/subfamilies";
27
- // import fs from "fs";
28
-
29
- const indexKey: AvailableIndicesKey = "subFamilies";
30
-
31
- const getSubFamilyPage = async (
32
- topicSubFamily: Entry
33
- ): Promise<pageResponse> => {
34
- const defaultEnvironmentLocaleCode = await getEnvironmentDefaultLocaleCode();
35
- const subFamilyPage = await getEntryByID(
36
- `${topicSubFamily.sys.id}_PAGE`,
37
- "page"
38
- );
39
- if (!subFamilyPage) {
40
- log(`${topicSubFamily.sys.id}_PAGE not found`, "WARN");
41
- return {
42
- slugs: {},
43
- type: "",
44
- // details: {},
45
- };
46
- }
47
-
48
- const subFamilyPageId = subFamilyPage.sys.id;
49
-
50
- // check if subFamily has many relations with model
51
- log(`check if subFamily has many relations with model`);
52
- const client = await getClient();
53
- const { items: modelEntries } = await client.withAllLocales.getEntries({
54
- content_type: "topicModel",
55
- "fields.subFamily.sys.id": subFamilyPageId.replace("_PAGE", ""),
56
- limit: 2,
57
- select: "sys,fields.catalog,fields.subFamily",
58
- });
59
-
60
- if (modelEntries?.length === 1) {
61
- log(`Return model page slug`);
62
- // Return model page slug
63
- const modelEntry = modelEntries[0];
64
- const modelPageId = `${modelEntry.sys.id}_PAGE`;
65
- const modelPage = await getEntryByID(
66
- modelPageId,
67
- "page",
68
- "fields.slug,fields.type"
69
- );
70
-
71
- // const catalogEntryId =
72
- // modelEntry?.fields?.catalog?.[defaultEnvironmentLocaleCode]?.sys?.id;
73
- // const modelCatalogPage: any = catalogEntryId
74
- // ? await getEntryByID(`${catalogEntryId}_PAGE`, "page", "fields.slug")
75
- // : {};
76
- // const subFamilyEntryId =
77
- // modelEntry?.fields?.subFamily?.[defaultEnvironmentLocaleCode]?.sys?.id;
78
- // const modelCatalogSubFamilyPage: any = subFamilyEntryId
79
- // ? await getEntryByID(`${subFamilyEntryId}_PAGE`, "page", "fields.slug")
80
- // : {};
81
- if (modelPage) {
82
- return {
83
- slugs: modelPage?.fields?.slug,
84
- type: modelPage?.fields?.type?.[defaultEnvironmentLocaleCode],
85
- // details: {
86
- // catalogPageSlugs:
87
- // keysToLowerCase(modelCatalogPage?.fields?.slug) || {},
88
- // subFamilyPageSlugs:
89
- // keysToLowerCase(modelCatalogSubFamilyPage?.fields?.slug) || {},
90
- // },
91
- };
92
- } else {
93
- log(`The modelPage with id "${modelPageId}" not found`, "WARN");
94
- }
95
- }
96
-
97
- // Return SubFamily page slug
98
- if (subFamilyPage) {
99
- log(`Return SubFamily page slug`);
100
- return getSubFamilyPageSlugWithDetails(topicSubFamily);
101
- } else {
102
- log(
103
- `The subFamilyPage with id "${topicSubFamily.sys.id}_PAGE" not found`,
104
- "WARN"
105
- );
106
- }
107
-
108
- // if it doesn't find any slugs
109
- log(`slug not found`, "WARN");
110
- return null;
111
- };
112
-
113
- const getProductFields = async (
114
- topicSubFamily: Entry,
115
- destination: "PROFESSIONAL_GLOBAL" | "PROFESSIONAL_US" = "PROFESSIONAL_GLOBAL"
116
- ): Promise<any> => {
117
- const defaultEnvironmentLocaleCode = await getEnvironmentDefaultLocaleCode();
118
- const catalogName = capitalizeFirstLetter(
119
- (
120
- topicSubFamily.fields.catalog?.[defaultEnvironmentLocaleCode]?.sys.id ||
121
- ""
122
- ).toLowerCase()
123
- );
124
- if (!catalogName) {
125
- log(`Cannot find catalog name`, "WARN");
126
- return {};
127
- }
128
-
129
- const fieldName = `subFamilies${catalogName}`;
130
-
131
- const topicProductEntries = await getAllEntries(
132
- "topicProduct",
133
- "sys,fields.productFields",
134
- `fields.${fieldName}.sys.id[in]`,
135
- `${topicSubFamily.sys.id}`,
136
- 50,
137
- [{ key: "fields.destinations[in]", value: destination }]
138
- );
139
- if (!topicProductEntries?.length) {
140
- log(`No products founded for subFamily ${topicSubFamily.sys.id}`, "WARN");
141
- return false;
142
- } else {
143
- log(`${topicProductEntries?.length} products founded`);
144
- }
145
-
146
- let productFields: any = {};
147
- productFields.availableTo = [];
148
- const allDestinations =
149
- topicSubFamily?.fields?.destinations?.[defaultEnvironmentLocaleCode] || [];
150
- productFields.totalProducts = {};
151
- for (const destination of allDestinations) {
152
- productFields.totalProducts[destination] = topicProductEntries.filter(
153
- (topicProductEntry) =>
154
- topicProductEntry?.fields?.productFields?.[
155
- defaultEnvironmentLocaleCode
156
- ]?.destinations?.find(
157
- (productDestination: any) => productDestination.code === destination
158
- )
159
- ).length;
160
- }
161
-
162
- for (const topicProduct of topicProductEntries) {
163
- if (topicProduct?.fields?.productFields?.[defaultEnvironmentLocaleCode]) {
164
- const pimDetails =
165
- topicProduct?.fields?.productFields?.[defaultEnvironmentLocaleCode];
166
-
167
- // AVAILABLE TO
168
- if (
169
- pimDetails.visibleToShop &&
170
- !productFields.availableTo.includes("visibleToShop")
171
- ) {
172
- productFields.availableTo.push("visibleToShop");
173
- }
174
- if (
175
- pimDetails.quickDelivery &&
176
- !productFields.availableTo.includes("quickDelivery")
177
- ) {
178
- productFields.availableTo.push("quickDelivery");
179
- }
180
-
181
- if (!productFields?.certification) {
182
- productFields.certification = [];
183
- }
184
-
185
- // CERTIFICATION - ENEC | PIM certification->enec
186
- if (
187
- pimDetails?.certification?.enec?.code &&
188
- sanitizeValue(pimDetails.certification.enec.code) &&
189
- productFields?.certification.indexOf("ENEC") === -1
190
- ) {
191
- productFields.certification.push("ENEC");
192
- }
193
- // CERTIFICATION - UL | PIM certification->ul
194
- if (
195
- pimDetails?.certification?.ul?.code &&
196
- sanitizeValue(pimDetails.certification.ul.code) &&
197
- productFields?.certification.indexOf("UL") === -1
198
- ) {
199
- productFields.certification.push("UL");
200
- }
201
-
202
- // MOUNTINGS [Has many]
203
- productFields = addProductFieldValueCodesByPimDetails(
204
- pimDetails,
205
- productFields,
206
- "mountings"
207
- );
208
-
209
- // LOCATIONS [Has many]
210
- productFields = addProductFieldValueCodesByPimDetails(
211
- pimDetails,
212
- productFields,
213
- "locations"
214
- );
215
-
216
- // ORINTATIONS [Has many]
217
- productFields = addProductFieldValueCodesByPimDetails(
218
- pimDetails,
219
- productFields,
220
- "orientations",
221
- "physical"
222
- );
223
-
224
- // LENGTH (MM)
225
- productFields = addProductFieldValueCodesByPimDetails(
226
- pimDetails,
227
- productFields,
228
- "length",
229
- "physical"
230
- );
231
-
232
- // LENGTH (IN)
233
- productFields = addProductFieldValueCodesByPimDetails(
234
- pimDetails,
235
- productFields,
236
- "length_us",
237
- "physical"
238
- );
239
-
240
- // SHAPE
241
- productFields = addProductFieldValueCodesByPimDetails(
242
- pimDetails,
243
- productFields,
244
- "shapes",
245
- "physical"
246
- );
247
-
248
- // POWER (W) | PIM wPower
249
- productFields = addProductFieldValueCodesByPimDetails(
250
- pimDetails,
251
- productFields,
252
- "wPower",
253
- "electrical"
254
- );
255
-
256
- // System flux (lm) | PIM realNetFlow
257
- productFields = addProductFieldValueCodesByPimDetails(
258
- pimDetails,
259
- productFields,
260
- "realNetFlow",
261
- "photometric"
262
- );
263
-
264
- // CCT (K) [Only one] | PIM temperatureColor
265
- productFields = addProductFieldValueCodesByPimDetails(
266
- pimDetails,
267
- productFields,
268
- "temperatureColor",
269
- "photometric"
270
- );
271
-
272
- // CRI> [Only one]
273
- productFields = addProductFieldValueCodesByPimDetails(
274
- pimDetails,
275
- productFields,
276
- "cri",
277
- "photometric"
278
- );
279
-
280
- // Dimmable| PIM dimming [Has many]
281
- productFields = addProductFieldValueCodesByPimDetails(
282
- pimDetails,
283
- productFields,
284
- "dimming",
285
- "electrical"
286
- );
287
-
288
- // | PIM bucketColours [Has many]
289
- productFields = addProductFieldValueCodesByPimDetails(
290
- pimDetails,
291
- productFields,
292
- "bucketColours"
293
- );
294
-
295
- // DRIVER TYPE | PIM powerSupplyType [Has many]
296
- productFields = addProductFieldValueCodesByPimDetails(
297
- pimDetails,
298
- productFields,
299
- "powerSupplyType",
300
- "electrical"
301
- );
302
-
303
- // LIGHTING DISTRIBUTIONS | PIM powerSupplyType [Has many]
304
- productFields = addProductFieldValueCodesByPimDetails(
305
- pimDetails,
306
- productFields,
307
- "lightingDistributions",
308
- "optical"
309
- );
310
-
311
- // OPTICAL TYPE [Only one]
312
- productFields = addProductFieldValueCodesByPimDetails(
313
- pimDetails,
314
- productFields,
315
- "opticalType",
316
- "optical"
317
- );
318
-
319
- // MARKETS [Has many]
320
- productFields = addProductFieldValueCodesByPimDetails(
321
- pimDetails,
322
- productFields,
323
- "markets"
324
- );
325
-
326
- // UPGRADE
327
- productFields = addProductFieldValueCodesByPimDetails(
328
- pimDetails,
329
- productFields,
330
- "upgrade"
331
- );
332
-
333
- // CERTIFICATIONS;
334
- productFields = addProductFieldValueCodesByPimDetails(
335
- pimDetails,
336
- productFields,
337
- "certifications"
338
- );
339
-
340
- // EXTERNAL IP
341
- productFields = addProductFieldValueCodesByPimDetails(
342
- pimDetails,
343
- productFields,
344
- "externalIp",
345
- "marking"
346
- );
347
-
348
- // INTERNAL IP
349
- productFields = addProductFieldValueCodesByPimDetails(
350
- pimDetails,
351
- productFields,
352
- "ipCategory",
353
- "marking"
354
- );
355
-
356
- // IP
357
- productFields = addProductFieldValueCodesByPimDetails(
358
- pimDetails,
359
- productFields,
360
- "ipRating",
361
- "marking"
362
- );
363
-
364
- // MARKINGS
365
- productFields = addProductFieldValueCodesByPimDetails(
366
- pimDetails,
367
- productFields,
368
- "markings",
369
- "marking"
370
- );
371
-
372
- // log(`Get certificationFilters details...`);
373
- productFields.certificationFilters = getCertificationFilters(pimDetails);
374
-
375
- // log(`Get filterableCertifications details...`);
376
- const filterableCertificationsFields = ["enec", "ul", "certificates"];
377
- for (const filterableCertificationsField of filterableCertificationsFields) {
378
- productFields = addProductFieldValueCodesByPimDetails(
379
- pimDetails,
380
- productFields,
381
- filterableCertificationsField,
382
- "certification",
383
- "filterableCertifications",
384
- false,
385
- true
386
- );
387
- }
388
-
389
- if (!productFields?.certification) {
390
- productFields.certification = {};
391
- }
392
-
393
- productFields.certification.enecCertified =
394
- !!productFields.certification?.enecCertified;
395
-
396
- // DESTINATIONS
397
- productFields = addProductFieldValueCodesByPimDetails(
398
- pimDetails,
399
- productFields,
400
- "destinations"
401
- );
402
- }
403
- }
404
-
405
- return productFields;
406
- };
407
-
408
- const isObjectToDelete = (
409
- object: any,
410
- defaultEnvironmentLocaleCode: string
411
- ) => {
412
- return (
413
- !object?.productFields || !object?.slugs?.[defaultEnvironmentLocaleCode]
414
- );
415
- };
416
-
417
- const getObject = async (
418
- topicSubFamily: Entry
419
- ): Promise<AlgoliaFamilyRecord> => {
420
- const defaultEnvironmentLocaleCode = await getEnvironmentDefaultLocaleCode();
421
- log(`Get details of the ${topicSubFamily.sys.id} topicSubFamily`);
422
- const topicSubFamilyWithFields = await getEntryByID(
423
- topicSubFamily.sys.id,
424
- "topicSubFamily"
425
- );
426
-
427
- log(`Get page details...`);
428
- const page = await getSubFamilyPage(topicSubFamilyWithFields);
429
- log(`Slugs type: ${page?.type}`);
430
-
431
- log(`Get catalogs details...`);
432
- const catalogs = await getTopicDetails(
433
- topicSubFamilyWithFields,
434
- "catalog",
435
- "topicCatalog"
436
- );
437
- log(`${catalogs?.length} catalogs founded`);
438
-
439
- log(`Get categories details...`);
440
- const categories = await getTopicDetails(
441
- topicSubFamilyWithFields,
442
- "category",
443
- "topicCategory"
444
- );
445
- log(`${categories?.length} categories founded`);
446
-
447
- log(`Get family details...`);
448
- const families = await getTopicDetails(
449
- topicSubFamilyWithFields,
450
- "parentFamily",
451
- "topicFamily"
452
- );
453
- const parentFamily = families?.[0];
454
- log(`${parentFamily?.code} family founded`);
455
-
456
- log(`Get productFields details...`);
457
- const productFields = await getProductFields(topicSubFamilyWithFields);
458
- log(`Get productFieldsUs details...`);
459
- const productFieldsUs = await getProductFields(
460
- topicSubFamilyWithFields,
461
- "PROFESSIONAL_US"
462
- );
463
-
464
- const isNew: boolean =
465
- topicSubFamilyWithFields?.fields?.isNew?.[defaultEnvironmentLocaleCode] ||
466
- false;
467
-
468
- log(`Get thumbnail imgix details...`);
469
- let thumbnailImgix = {};
470
- const thumbnailImgixWrapperImgixID =
471
- topicSubFamilyWithFields?.fields?.thumbnailImgix?.[
472
- defaultEnvironmentLocaleCode
473
- ]?.sys.id;
474
- if (thumbnailImgixWrapperImgixID) {
475
- thumbnailImgix = await getWrapperImgixFields(thumbnailImgixWrapperImgixID);
476
- } else {
477
- log(`No thumbnail imgix found`, "WARN");
478
- }
479
-
480
- log(`Get thumbnail imgix portrait details...`);
481
- let thumbnailImgixPortrait = {};
482
- const thumbnailImgixPortraitWrapperImgixID =
483
- topicSubFamilyWithFields?.fields?.thumbnailImgixPortrait?.[
484
- defaultEnvironmentLocaleCode
485
- ]?.sys.id;
486
- if (thumbnailImgixPortraitWrapperImgixID) {
487
- thumbnailImgixPortrait = await getWrapperImgixFields(
488
- thumbnailImgixPortraitWrapperImgixID
489
- );
490
- } else {
491
- log(`No thumbnail imgix portrait found`, "WARN");
492
- }
493
-
494
- log(`Get thumbnail still life imgix details...`);
495
- let thumbnailStillLifeImgix = {};
496
- const thumbnailStillLifeImgixWrapperImgixID =
497
- topicSubFamilyWithFields?.fields?.thumbnailStillLifeImgix?.[
498
- defaultEnvironmentLocaleCode
499
- ]?.sys.id;
500
- if (thumbnailStillLifeImgixWrapperImgixID) {
501
- thumbnailStillLifeImgix = await getWrapperImgixFields(
502
- thumbnailStillLifeImgixWrapperImgixID
503
- );
504
- } else {
505
- log(`No thumbnail still life imgix found`, "WARN");
506
- }
507
-
508
- log(`Get thumbnail still life imgix portrait details...`);
509
- let thumbnailStillLifeImgixPortrait = {};
510
- const thumbnailStillLifeImgixPortraitWrapperImgixID =
511
- topicSubFamilyWithFields?.fields?.thumbnailStillLifeImgixPortrait?.[
512
- defaultEnvironmentLocaleCode
513
- ]?.sys.id;
514
- if (thumbnailStillLifeImgixPortraitWrapperImgixID) {
515
- thumbnailStillLifeImgixPortrait = await getWrapperImgixFields(
516
- thumbnailStillLifeImgixPortraitWrapperImgixID
517
- );
518
- } else {
519
- log(`No thumbnail still life imgix portrait found`, "WARN");
520
- }
521
-
522
- log(`Get full screen imgix details...`);
523
- let fullScreenImageImgix = {};
524
- const fullScreenImageImgixWrapperImgixID =
525
- topicSubFamilyWithFields?.fields?.fullScreenImageImgix?.[
526
- defaultEnvironmentLocaleCode
527
- ]?.sys.id;
528
- if (fullScreenImageImgixWrapperImgixID) {
529
- fullScreenImageImgix = await getWrapperImgixFields(
530
- fullScreenImageImgixWrapperImgixID
531
- );
532
- } else {
533
- log(`No full screen imgix found`, "WARN");
534
- }
535
-
536
- log(`Get priority details...`);
537
- const priority =
538
- topicSubFamilyWithFields?.fields?.priority?.[
539
- defaultEnvironmentLocaleCode
540
- ] || 0;
541
-
542
- // Single record
543
- const record: AlgoliaFamilyRecord = {
544
- objectID: topicSubFamilyWithFields.sys.id,
545
- names: await getAllTranslations(
546
- topicSubFamilyWithFields?.fields?.name || {}
547
- ),
548
- code:
549
- topicSubFamilyWithFields?.fields?.code?.[defaultEnvironmentLocaleCode] ||
550
- "",
551
- thumbnailImgix,
552
- thumbnailImgixPortrait,
553
- thumbnailStillLifeImgix,
554
- thumbnailStillLifeImgixPortrait,
555
- fullScreenImageImgix,
556
- slugs: await getAllTranslations(page?.slugs || {}),
557
- slugType: page?.type || "",
558
- // slugDetails: await getAllTranslations(page?.details || {}),
559
- catalogs,
560
- categories,
561
- parentFamily,
562
- productFields,
563
- productFieldsUs,
564
- priority,
565
- isNew,
566
- destinations:
567
- topicSubFamilyWithFields?.fields?.destinations?.[
568
- defaultEnvironmentLocaleCode
569
- ] || [],
570
- lastSyncDate: getLocalISOTime(),
571
- };
572
-
573
- return record;
574
- };
575
-
576
- const getObjects = async (
577
- offset: number,
578
- limit: number,
579
- catalogCode?: AvailableCatalogs
580
- ): Promise<AlgoliaPaginateRecords> => {
581
- const client = await getClient();
582
-
583
- const opts: any = {
584
- content_type: "topicSubFamily",
585
- limit,
586
- skip: offset,
587
- select: "sys",
588
- };
589
- if (catalogCode) {
590
- opts["fields.catalog.sys.id"] = catalogCode;
591
- }
592
- const { items, total } = await client.withAllLocales.getEntries(opts);
593
-
594
- const objects: AlgoliaFamilyRecord[] = [];
595
- let count: number = Number(offset);
596
- let current: number = 0;
597
- for (const topicSubFamily of items) {
598
- log(`${++count} of ${total}`, "INFO");
599
- const timeStart = new Date();
600
- const record = await getObject(topicSubFamily);
601
- const timeEnd = new Date();
602
- const seconds = secondBetweenTwoDate(timeStart, timeEnd);
603
- log(`Execution time: ${seconds} seconds`);
604
- objects.push(record);
605
- if (serverUtils) {
606
- serverUtils.log(topicSubFamily.sys.id);
607
- const progress = Math.floor((++current / items.length) * 100);
608
- serverUtils.updateProgress(progress);
609
- }
610
- }
611
-
612
- return {
613
- objects,
614
- offset: Number(offset) + Number(limit),
615
- limit: Number(limit),
616
- completed: count >= total, // if is true the import is completed
617
- total,
618
- };
619
- };
620
-
621
- export const reindexSubFamilies = async (
622
- offset: number = 0,
623
- limit: number = 50,
624
- catalogCode?: AvailableCatalogs
625
- ) => {
626
- const timeStart = new Date();
627
- log(
628
- `reindexSubFamilies - offset: ${offset} limit: ${limit} catalog: ${catalogCode}`
629
- );
630
-
631
- const defaultEnvironmentLocaleCode = await getEnvironmentDefaultLocaleCode();
632
- const records = await getObjects(offset, limit, catalogCode);
633
- const objectsToSave = records.objects.filter(
634
- (object) => !isObjectToDelete(object, defaultEnvironmentLocaleCode)
635
- );
636
- const objectIdsToDelete = records.objects
637
- .filter((object) => isObjectToDelete(object, defaultEnvironmentLocaleCode))
638
- .map((object) => object.objectID);
639
-
640
- // Save records to Algolia
641
- const index = getIndex(indexKey);
642
- log(`Save ${objectsToSave.length} objects to ${index.indexName} index`);
643
- const savedObjectIDs = await index.saveObjects(objectsToSave);
644
- log(
645
- `Delete ${objectIdsToDelete.length} objects from ${index.indexName} index`
646
- );
647
- const deletedObjectIDs = await index.deleteObjects(objectIdsToDelete);
648
-
649
- const timeEnd = new Date();
650
- const seconds = secondBetweenTwoDate(timeStart, timeEnd);
651
- log(`Execution time: ${seconds} seconds`);
652
-
653
- return {
654
- ...records,
655
- savedObjectIDs: savedObjectIDs.objectIDs,
656
- deletedObjectIDs: deletedObjectIDs.objectIDs,
657
- };
658
- };
659
-
660
- export const reindexSubFamily = async (topicSubFamilyEntryId: string) => {
661
- const timeStart = new Date();
662
-
663
- log(`reindexSubFamily - entryId: ${topicSubFamilyEntryId} `);
664
-
665
- // Get single object data
666
- const topicSubFamily = await getEntryByID(
667
- topicSubFamilyEntryId,
668
- "topicSubFamily"
669
- );
670
-
671
- const index = getIndex(indexKey);
672
- let record = null;
673
- if (!topicSubFamily?.sys?.id) {
674
- log(
675
- `No topicSubFamily with id ${topicSubFamilyEntryId} found. Delete object if exists`,
676
- "WARN"
677
- );
678
- record = await index.deleteObject(topicSubFamilyEntryId);
679
- return { ...record };
680
- }
681
-
682
- const object = await getObject(topicSubFamily);
683
-
684
- // @ts-ignore
685
- // const jsonString = JSON.stringify(object, null, 2);
686
- // fs.writeFile(`${topicSubFamily?.sys?.id}.json`, jsonString, (err: any) => {
687
- // if (err) throw err;
688
- // console.log("The file has been saved!");
689
- // });
690
-
691
- // Save record to Algolia
692
- const defaultEnvironmentLocaleCode = await getEnvironmentDefaultLocaleCode();
693
- if (!isObjectToDelete(object, defaultEnvironmentLocaleCode)) {
694
- log(`Save object`);
695
- record = await index.saveObject(object);
696
- } else {
697
- log(`Delete object`);
698
- record = await index.deleteObject(object.objectID);
699
- }
700
- const timeEnd = new Date();
701
- const seconds = secondBetweenTwoDate(timeStart, timeEnd);
702
- log(`Execution time: ${seconds} seconds`);
703
-
704
- return { ...record, ...object };
705
- };
706
-
707
- export const removeSubFamilyObject = async (objectId: string) => {
708
- return removeIndexObject(objectId, indexKey);
709
- };