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,258 +0,0 @@
1
- import { log } from "../libs/logs";
2
- import {
3
- getClient,
4
- getEnvironmentDefaultLocaleCode,
5
- getEntryByID,
6
- getTopicPage,
7
- } from "../libs/contentful-cda";
8
- import { getIndex, AvailableIndicesKey, removeIndexObject } from "./config";
9
- import {
10
- getAllTranslations,
11
- getLocalISOTime,
12
- secondBetweenTwoDate,
13
- } from "../utils";
14
- import type { Entry } from "contentful-management/dist/typings/entities/entry";
15
- import {
16
- CfLocalizedEntryField,
17
- AlgoliaPaginateRecords,
18
- WrapperImageFields,
19
- } from "../types";
20
- import { getWrapperImgixFields } from "../libs/imgix";
21
-
22
- const indexKey: AvailableIndicesKey = "news";
23
-
24
- export type AlgoliaPostRecord = {
25
- objectID: string;
26
- name?: CfLocalizedEntryField;
27
- slugs?: {};
28
- isProtected?: boolean;
29
- previewExcerpt?: string;
30
- thumbnailImageImgix?: WrapperImageFields | {};
31
- fullScreenImageImgix?: WrapperImageFields | {};
32
- visualizationDate?: string;
33
- lastSyncDate?: string;
34
- };
35
-
36
- const isObjectToDelete = (
37
- object: any,
38
- defaultEnvironmentLocaleCode: string
39
- ) => {
40
- return !object?.slugs?.[defaultEnvironmentLocaleCode];
41
- };
42
-
43
- const getObject = async (topicNews: Entry): Promise<AlgoliaPostRecord> => {
44
- const defaultEnvironmentLocaleCode = await getEnvironmentDefaultLocaleCode();
45
- log(`Sync the ${topicNews.sys.id} topicNews...`);
46
- let topicNewsWithFields: Entry = topicNews;
47
-
48
- if (!topicNewsWithFields?.fields) {
49
- log(`Get the ${topicNews.sys.id} topicNews details...`);
50
- topicNewsWithFields = await getEntryByID(topicNews.sys.id, "topicNews");
51
- }
52
-
53
- if (!topicNewsWithFields) {
54
- log(`The topicNews ${topicNews.sys.id} not found`, "WARN");
55
-
56
- const recordFail: AlgoliaPostRecord = {
57
- objectID: topicNews?.sys?.id,
58
- };
59
-
60
- return recordFail; // return objectID to delete the record if it exists
61
- }
62
-
63
- log(`Get page details...`);
64
- const page = await getTopicPage(
65
- topicNews.sys.id,
66
- "fields.slug,fields.title,fields.protected"
67
- );
68
-
69
- if (!page) {
70
- log(`The topicNews page ${topicNews.sys.id} not found`, "WARN");
71
-
72
- const recordFail: AlgoliaPostRecord = {
73
- objectID: topicNews?.sys?.id,
74
- };
75
-
76
- return recordFail; // return objectID to delete the record if it exists
77
- }
78
-
79
- const slugs = await getAllTranslations(page?.fields.slug || {});
80
- const isProtected = !!page?.fields?.protected?.[defaultEnvironmentLocaleCode];
81
-
82
- log(`Get thumbnail imgix details...`);
83
- let thumbnailImageImgix = {};
84
- const thumbnailImgixWrapperImgixID =
85
- topicNewsWithFields?.fields?.thumbnailImageImgix?.[
86
- defaultEnvironmentLocaleCode
87
- ]?.sys.id;
88
- if (thumbnailImgixWrapperImgixID) {
89
- thumbnailImageImgix = await getWrapperImgixFields(
90
- thumbnailImgixWrapperImgixID
91
- );
92
- } else {
93
- log(`No thumbnail imgix found`, "WARN");
94
- }
95
-
96
- log(`Get fullScreenImageImgix imgix details...`);
97
- let fullScreenImageImgix = {};
98
- const fullScreenImageImgixWrapperImgixID =
99
- topicNewsWithFields?.fields?.fullScreenImageImgix?.[
100
- defaultEnvironmentLocaleCode
101
- ]?.sys.id;
102
- if (fullScreenImageImgixWrapperImgixID) {
103
- fullScreenImageImgix = await getWrapperImgixFields(
104
- fullScreenImageImgixWrapperImgixID
105
- );
106
- } else {
107
- log(`No fullScreenImageImgix found`, "WARN");
108
- }
109
-
110
- // Single record
111
- const record: AlgoliaPostRecord = {
112
- objectID: topicNewsWithFields.sys.id,
113
- name: await getAllTranslations(page?.fields?.title || {}),
114
- slugs,
115
- isProtected,
116
- previewExcerpt: await getAllTranslations(
117
- topicNewsWithFields?.fields?.previewExcerpt || {}
118
- ),
119
- thumbnailImageImgix,
120
- fullScreenImageImgix,
121
- visualizationDate:
122
- topicNewsWithFields?.fields?.visualizationDate?.[
123
- defaultEnvironmentLocaleCode
124
- ] || "",
125
- lastSyncDate: getLocalISOTime(),
126
- };
127
-
128
- return record;
129
- };
130
-
131
- export const reindexPost = async (topicNewsId: string) => {
132
- const defaultEnvironmentLocaleCode = await getEnvironmentDefaultLocaleCode();
133
- const timeStart = new Date();
134
-
135
- log(`reindexPost - entryId: ${topicNewsId} `);
136
-
137
- const topicNews = await getEntryByID(topicNewsId, "topicNews");
138
-
139
- const index = getIndex(indexKey);
140
- let record = null;
141
- if (!topicNews) {
142
- log(
143
- `No topicNews found with id ${topicNewsId}. Delete object if exists`,
144
- "WARN"
145
- );
146
- record = await index.deleteObject(topicNewsId);
147
- return { ...record };
148
- }
149
-
150
- const object = await getObject(topicNews);
151
-
152
- // Save record to Algolia
153
- if (!isObjectToDelete(object, defaultEnvironmentLocaleCode)) {
154
- log(`Save object`);
155
- record = await index.saveObject(object);
156
- } else {
157
- log(`Delete object`);
158
- record = await index.deleteObject(object.objectID);
159
- }
160
- const timeEnd = new Date();
161
- const seconds = secondBetweenTwoDate(timeStart, timeEnd);
162
- log(`Execution time: ${seconds} seconds`);
163
-
164
- return { ...record, ...object };
165
- };
166
-
167
- /**
168
- * Get Objects
169
- *
170
- * @param offset
171
- * @param limit
172
- * @param filterKey
173
- * @param filterValue
174
- * @returns
175
- */
176
- const getObjects = async (
177
- offset: number,
178
- limit: number,
179
- filterKey?: string,
180
- filterValue?: string
181
- ): Promise<AlgoliaPaginateRecords> => {
182
- const client = await getClient();
183
-
184
- const opts: any = {
185
- content_type: "topicNews",
186
- limit,
187
- skip: offset,
188
- // select: "",
189
- };
190
- if (filterKey && filterValue) {
191
- opts[filterKey] = filterValue;
192
- }
193
- const { items, total } = await client.withAllLocales.getEntries(opts);
194
-
195
- const objects: AlgoliaPostRecord[] = [];
196
- let count: number = Number(offset);
197
- for (const topicNews of items) {
198
- log(`${++count} of ${total}`, "INFO");
199
- const timeStart = new Date();
200
- const record = await getObject(topicNews);
201
- const timeEnd = new Date();
202
- const seconds = secondBetweenTwoDate(timeStart, timeEnd);
203
- log(`Execution time: ${seconds} seconds`);
204
- objects.push(record);
205
- }
206
-
207
- return {
208
- objects,
209
- offset: Number(offset) + Number(limit),
210
- limit: Number(limit),
211
- completed: count >= total, // if is true the import is completed
212
- total,
213
- };
214
- };
215
-
216
- export const reindexPosts = async (
217
- offset: number = 0,
218
- limit: number = 50,
219
- filterKey: string = "",
220
- filterValue: string = ""
221
- ) => {
222
- const defaultEnvironmentLocaleCode = await getEnvironmentDefaultLocaleCode();
223
- const timeStart = new Date();
224
- log(
225
- `reindexPosts - filterKey: ${filterKey} filterValue: ${filterValue} offset: ${offset} limit: ${limit} `
226
- );
227
-
228
- const records = await getObjects(offset, limit, filterKey, filterValue);
229
- const objectsToSave = records.objects.filter(
230
- (object) => !isObjectToDelete(object, defaultEnvironmentLocaleCode)
231
- );
232
- const objectIdsToDelete = records.objects
233
- .filter((object) => isObjectToDelete(object, defaultEnvironmentLocaleCode))
234
- .map((object) => object.objectID);
235
-
236
- // Save records to Algolia
237
- const index = getIndex(indexKey);
238
- log(`Save ${objectsToSave.length} objects to ${index.indexName} index`);
239
- const savedObjectIDs = await index.saveObjects(objectsToSave);
240
- log(
241
- `Delete ${objectIdsToDelete.length} objects from ${index.indexName} index`
242
- );
243
- const deletedObjectIDs = await index.deleteObjects(objectIdsToDelete);
244
-
245
- const timeEnd = new Date();
246
- const seconds = secondBetweenTwoDate(timeStart, timeEnd);
247
- log(`Execution time: ${seconds} seconds`);
248
-
249
- return {
250
- ...records,
251
- savedObjectIDs: savedObjectIDs.objectIDs,
252
- deletedObjectIDs: deletedObjectIDs.objectIDs,
253
- };
254
- };
255
-
256
- export const removePostObject = async (objectId: string) => {
257
- return removeIndexObject(objectId, indexKey);
258
- };
@@ -1,255 +0,0 @@
1
- import { log } from "../libs/logs";
2
- import {
3
- getClient,
4
- getEnvironmentDefaultLocaleCode,
5
- getEntryByID,
6
- getTopicDetails,
7
- } from "../libs/contentful-cda";
8
- import { getIndex, AvailableIndicesKey, removeIndexObject } from "./config";
9
- import {
10
- getAllTranslations,
11
- getLocalISOTime,
12
- secondBetweenTwoDate,
13
- } from "../utils";
14
- import type { Entry } from "contentful-management/dist/typings/entities/entry";
15
- import {
16
- CfLocalizedEntryField,
17
- AlgoliaPaginateRecords,
18
- WrapperImageFields,
19
- TopicDetailsResponse,
20
- CfSys,
21
- } from "../types";
22
- import { getWrapperImgixFields } from "../libs/imgix";
23
- import { getAssetsByComponentAssetIds } from "./downloads";
24
-
25
- const indexKey: AvailableIndicesKey = "pressRelease";
26
-
27
- export type AlgoliaPressReleaseRecord = {
28
- objectID: string;
29
- name?: CfLocalizedEntryField;
30
- description?: string;
31
- thumbnailImgix?: WrapperImageFields | {};
32
- lastSyncDate?: string;
33
- category?: TopicDetailsResponse;
34
- assets?: {};
35
- visualizationDate?: string;
36
- };
37
-
38
- const isObjectToDelete = (
39
- object: any,
40
- defaultEnvironmentLocaleCode: string
41
- ) => {
42
- return !object?.name?.[defaultEnvironmentLocaleCode];
43
- };
44
-
45
- const getObject = async (
46
- topicPressRelease: Entry
47
- ): Promise<AlgoliaPressReleaseRecord> => {
48
- const defaultEnvironmentLocaleCode = await getEnvironmentDefaultLocaleCode();
49
- log(`Sync the ${topicPressRelease.sys.id} topicPressRelease...`);
50
- let topicPressReleaseWithFields: Entry = topicPressRelease;
51
-
52
- if (!topicPressReleaseWithFields?.fields) {
53
- log(`Get the ${topicPressRelease.sys.id} topicPressRelease details...`);
54
- topicPressReleaseWithFields = await getEntryByID(
55
- topicPressRelease.sys.id,
56
- "topicPressRelease"
57
- );
58
- }
59
-
60
- if (!topicPressReleaseWithFields) {
61
- log(`The topicPressRelease ${topicPressRelease.sys.id} not found`, "WARN");
62
-
63
- const recordFail: AlgoliaPressReleaseRecord = {
64
- objectID: topicPressRelease?.sys?.id,
65
- };
66
-
67
- return recordFail; // return objectID to delete the record if it exists
68
- }
69
-
70
- log(`Get thumbnail imgix details...`);
71
- let thumbnailImgix = {};
72
- const thumbnailImgixWrapperImgixID =
73
- topicPressReleaseWithFields?.fields?.thumbnailImgix?.[
74
- defaultEnvironmentLocaleCode
75
- ]?.sys.id;
76
- if (thumbnailImgixWrapperImgixID) {
77
- thumbnailImgix = await getWrapperImgixFields(thumbnailImgixWrapperImgixID);
78
- } else {
79
- log(`No thumbnail imgix found`, "WARN");
80
- }
81
-
82
- log(`Get category details...`);
83
- const category = await getTopicDetails(
84
- topicPressReleaseWithFields,
85
- "category",
86
- "topicPressReleaseCategory",
87
- false,
88
- false,
89
- true
90
- );
91
-
92
- log(`Get assets details...`);
93
- let assets: any = [];
94
- const componentAssets =
95
- topicPressReleaseWithFields?.fields?.assets?.[defaultEnvironmentLocaleCode];
96
- if (componentAssets) {
97
- const componentAssetIds = componentAssets.map(
98
- (item: CfSys) => item?.sys?.id
99
- );
100
- assets = await getAssetsByComponentAssetIds(componentAssetIds);
101
- }
102
-
103
- // Single record
104
- const record: AlgoliaPressReleaseRecord = {
105
- objectID: topicPressReleaseWithFields.sys.id,
106
- name: await getAllTranslations(
107
- topicPressReleaseWithFields?.fields?.name || {}
108
- ),
109
- description: await getAllTranslations(
110
- topicPressReleaseWithFields?.fields?.description || {}
111
- ),
112
- thumbnailImgix,
113
- category: category?.[0],
114
- assets,
115
- visualizationDate:
116
- topicPressReleaseWithFields?.fields?.visualizationDate?.[
117
- defaultEnvironmentLocaleCode
118
- ] || "",
119
- lastSyncDate: getLocalISOTime(),
120
- };
121
-
122
- return record;
123
- };
124
-
125
- export const reindexPressRelease = async (topicPressReleaseId: string) => {
126
- const defaultEnvironmentLocaleCode = await getEnvironmentDefaultLocaleCode();
127
- const timeStart = new Date();
128
-
129
- log(`reindexPressRelease - entryId: ${topicPressReleaseId} `);
130
-
131
- const topicPressRelease = await getEntryByID(
132
- topicPressReleaseId,
133
- "topicPressRelease"
134
- );
135
-
136
- const index = getIndex(indexKey);
137
- let record = null;
138
- if (!topicPressRelease) {
139
- log(
140
- `No topicPressReleaseId found with id ${topicPressReleaseId}. Delete object if exists`,
141
- "WARN"
142
- );
143
- record = await index.deleteObject(topicPressReleaseId);
144
- return { ...record };
145
- }
146
-
147
- const object = await getObject(topicPressRelease);
148
-
149
- // Save record to Algolia
150
- if (!isObjectToDelete(object, defaultEnvironmentLocaleCode)) {
151
- log(`Save object`);
152
- record = await index.saveObject(object);
153
- } else {
154
- log(`Delete object`);
155
- record = await index.deleteObject(object.objectID);
156
- }
157
- const timeEnd = new Date();
158
- const seconds = secondBetweenTwoDate(timeStart, timeEnd);
159
- log(`Execution time: ${seconds} seconds`);
160
-
161
- return { ...record, ...object };
162
- };
163
-
164
- /**
165
- * Get Objects
166
- *
167
- * @param offset
168
- * @param limit
169
- * @param filterKey
170
- * @param filterValue
171
- * @returns
172
- */
173
- const getObjects = async (
174
- offset: number,
175
- limit: number,
176
- filterKey?: string,
177
- filterValue?: string
178
- ): Promise<AlgoliaPaginateRecords> => {
179
- const client = await getClient();
180
-
181
- const opts: any = {
182
- content_type: "topicPressRelease",
183
- limit,
184
- skip: offset,
185
- // select: "",
186
- };
187
- if (filterKey && filterValue) {
188
- opts[filterKey] = filterValue;
189
- }
190
- const { items, total } = await client.withAllLocales.getEntries(opts);
191
-
192
- const objects: AlgoliaPressReleaseRecord[] = [];
193
- let count: number = Number(offset);
194
- for (const topicPressRelease of items) {
195
- log(`${++count} of ${total}`, "INFO");
196
- const timeStart = new Date();
197
- const record = await getObject(topicPressRelease);
198
- const timeEnd = new Date();
199
- const seconds = secondBetweenTwoDate(timeStart, timeEnd);
200
- log(`Execution time: ${seconds} seconds`);
201
- objects.push(record);
202
- }
203
-
204
- return {
205
- objects,
206
- offset: Number(offset) + Number(limit),
207
- limit: Number(limit),
208
- completed: count >= total, // if is true the import is completed
209
- total,
210
- };
211
- };
212
-
213
- export const reindexPressReleases = async (
214
- offset: number = 0,
215
- limit: number = 50,
216
- filterKey: string = "",
217
- filterValue: string = ""
218
- ) => {
219
- const defaultEnvironmentLocaleCode = await getEnvironmentDefaultLocaleCode();
220
- const timeStart = new Date();
221
- log(
222
- `reindexPressReleases - filterKey: ${filterKey} filterValue: ${filterValue} offset: ${offset} limit: ${limit} `
223
- );
224
-
225
- const records = await getObjects(offset, limit, filterKey, filterValue);
226
- const objectsToSave = records.objects.filter(
227
- (object) => !isObjectToDelete(object, defaultEnvironmentLocaleCode)
228
- );
229
- const objectIdsToDelete = records.objects
230
- .filter((object) => isObjectToDelete(object, defaultEnvironmentLocaleCode))
231
- .map((object) => object.objectID);
232
-
233
- // Save records to Algolia
234
- const index = getIndex(indexKey);
235
- log(`Save ${objectsToSave.length} objects to ${index.indexName} index`);
236
- const savedObjectIDs = await index.saveObjects(objectsToSave);
237
- log(
238
- `Delete ${objectIdsToDelete.length} objects from ${index.indexName} index`
239
- );
240
- const deletedObjectIDs = await index.deleteObjects(objectIdsToDelete);
241
-
242
- const timeEnd = new Date();
243
- const seconds = secondBetweenTwoDate(timeStart, timeEnd);
244
- log(`Execution time: ${seconds} seconds`);
245
-
246
- return {
247
- ...records,
248
- savedObjectIDs: savedObjectIDs.objectIDs,
249
- deletedObjectIDs: deletedObjectIDs.objectIDs,
250
- };
251
- };
252
-
253
- export const removePressReleaseObject = async (objectId: string) => {
254
- return removeIndexObject(objectId, indexKey);
255
- };