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