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.
- package/dist/algolia/clean.js +0 -1
- package/dist/algolia/config.js +0 -1
- package/dist/algolia/downloads.js +0 -1
- package/dist/algolia/families.js +0 -1
- package/dist/algolia/inspirations.js +0 -1
- package/dist/algolia/models.js +0 -1
- package/dist/algolia/news.js +0 -1
- package/dist/algolia/pressRelease.js +0 -1
- package/dist/algolia/pressReview.js +0 -1
- package/dist/algolia/products.js +0 -1
- package/dist/algolia/projects.js +0 -1
- package/dist/algolia/stories.js +0 -1
- package/dist/algolia/subFamilies.js +0 -1
- package/dist/algolia/subModels.js +0 -1
- package/dist/browser.js +0 -1
- package/dist/downloads/classes/manageEntry.js +0 -1
- package/dist/downloads/import.js +0 -1
- package/dist/index.js +0 -1
- package/dist/libs/contentful-cda.js +0 -1
- package/dist/libs/contentful.js +0 -1
- package/dist/libs/imgix.js +0 -1
- package/dist/libs/logs.js +0 -1
- package/dist/libs/netlify.js +0 -1
- package/dist/libs/notifications.js +0 -1
- package/dist/libs/pdf.js +0 -1
- package/dist/libs/s3.js +0 -1
- package/dist/libs/sentry.js +0 -1
- package/dist/pim/config.js +0 -1
- package/dist/pim/endpoints.js +0 -1
- package/dist/pim/methods/bulkPublish.js +0 -1
- package/dist/pim/methods/catalogs.js +0 -1
- package/dist/pim/methods/checkTopicDraftAndPagePublished.js +0 -1
- package/dist/pim/methods/designers.js +0 -1
- package/dist/pim/methods/dictionary.js +0 -1
- package/dist/pim/methods/families.js +0 -1
- package/dist/pim/methods/latestProducts.js +0 -1
- package/dist/pim/methods/migrateEntryFields.js +0 -1
- package/dist/pim/methods/models.js +0 -1
- package/dist/pim/methods/pages/catalogs.js +0 -1
- package/dist/pim/methods/pages/families.js +0 -1
- package/dist/pim/methods/pages/subfamilies.js +0 -1
- package/dist/pim/methods/products.js +0 -1
- package/dist/pim/methods/subfamilies.js +0 -1
- package/dist/pim/methods/submodels.js +0 -1
- package/dist/pim/request.js +0 -1
- package/dist/resources/AllProducts.js +0 -1
- package/dist/resources/Audit.js +0 -1
- package/dist/resources/CatalogDetails.js +0 -1
- package/dist/resources/CollectionModels.js +0 -1
- package/dist/resources/CollectionSubFamilies.js +0 -1
- package/dist/resources/CollectionSubModels.js +0 -1
- package/dist/resources/DProductSubLine.js +0 -1
- package/dist/resources/FamilyDetails.js +0 -1
- package/dist/resources/ProductDetails.js +0 -1
- package/dist/resources/ProductRelation.js +0 -1
- package/dist/resources/cfFields.js +0 -1
- package/dist/types.js +0 -1
- package/dist/utils.js +0 -1
- package/package.json +7 -2
- package/.env.example +0 -46
- package/.nvmrc +0 -1
- package/.vscode/settings.json +0 -21
- package/dist/algolia/clean.js.map +0 -1
- package/dist/algolia/config.js.map +0 -1
- package/dist/algolia/downloads.js.map +0 -1
- package/dist/algolia/families.js.map +0 -1
- package/dist/algolia/inspirations.js.map +0 -1
- package/dist/algolia/models.js.map +0 -1
- package/dist/algolia/news.js.map +0 -1
- package/dist/algolia/pressRelease.js.map +0 -1
- package/dist/algolia/pressReview.js.map +0 -1
- package/dist/algolia/products.js.map +0 -1
- package/dist/algolia/projects.js.map +0 -1
- package/dist/algolia/stories.js.map +0 -1
- package/dist/algolia/subFamilies.js.map +0 -1
- package/dist/algolia/subModels.js.map +0 -1
- package/dist/browser.js.map +0 -1
- package/dist/downloads/classes/manageEntry.js.map +0 -1
- package/dist/downloads/import.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/libs/contentful-cda.js.map +0 -1
- package/dist/libs/contentful.js.map +0 -1
- package/dist/libs/imgix.js.map +0 -1
- package/dist/libs/logs.js.map +0 -1
- package/dist/libs/netlify.js.map +0 -1
- package/dist/libs/notifications.js.map +0 -1
- package/dist/libs/pdf.js.map +0 -1
- package/dist/libs/s3.js.map +0 -1
- package/dist/libs/sentry.js.map +0 -1
- package/dist/pim/config.js.map +0 -1
- package/dist/pim/endpoints.js.map +0 -1
- package/dist/pim/methods/bulkPublish.js.map +0 -1
- package/dist/pim/methods/catalogs.js.map +0 -1
- package/dist/pim/methods/checkTopicDraftAndPagePublished.js.map +0 -1
- package/dist/pim/methods/designers.js.map +0 -1
- package/dist/pim/methods/dictionary.js.map +0 -1
- package/dist/pim/methods/families.js.map +0 -1
- package/dist/pim/methods/latestProducts.js.map +0 -1
- package/dist/pim/methods/migrateEntryFields.js.map +0 -1
- package/dist/pim/methods/models.js.map +0 -1
- package/dist/pim/methods/pages/catalogs.js.map +0 -1
- package/dist/pim/methods/pages/families.js.map +0 -1
- package/dist/pim/methods/pages/subfamilies.js.map +0 -1
- package/dist/pim/methods/products.js.map +0 -1
- package/dist/pim/methods/subfamilies.js.map +0 -1
- package/dist/pim/methods/submodels.js.map +0 -1
- package/dist/pim/request.js.map +0 -1
- package/dist/resources/AllProducts.js.map +0 -1
- package/dist/resources/Audit.js.map +0 -1
- package/dist/resources/CatalogDetails.js.map +0 -1
- package/dist/resources/CollectionModels.js.map +0 -1
- package/dist/resources/CollectionSubFamilies.js.map +0 -1
- package/dist/resources/CollectionSubModels.js.map +0 -1
- package/dist/resources/DProductSubLine.js.map +0 -1
- package/dist/resources/FamilyDetails.js.map +0 -1
- package/dist/resources/ProductDetails.js.map +0 -1
- package/dist/resources/ProductRelation.js.map +0 -1
- package/dist/resources/cfFields.js.map +0 -1
- package/dist/types.js.map +0 -1
- package/dist/utils.js.map +0 -1
- package/docs/import-data-from-the-dictionary.md +0 -83
- package/docs/import-products.md +0 -61
- package/docs/import-taxonomies-from-the-catalog.md +0 -60
- package/docs/settings.md +0 -47
- package/jest.config.js +0 -16
- package/local-fn/reindex.js +0 -182
- package/src/algolia/clean.ts +0 -164
- package/src/algolia/config.ts +0 -390
- package/src/algolia/downloads.ts +0 -346
- package/src/algolia/families.ts +0 -652
- package/src/algolia/inspirations.ts +0 -315
- package/src/algolia/models.ts +0 -589
- package/src/algolia/news.ts +0 -258
- package/src/algolia/pressRelease.ts +0 -255
- package/src/algolia/pressReview.ts +0 -247
- package/src/algolia/products.ts +0 -731
- package/src/algolia/projects.ts +0 -339
- package/src/algolia/stories.ts +0 -347
- package/src/algolia/subFamilies.ts +0 -709
- package/src/algolia/subModels.ts +0 -359
- package/src/browser.ts +0 -122
- package/src/downloads/classes/manageEntry.ts +0 -99
- package/src/downloads/csv/legal.csv +0 -5
- package/src/downloads/csv/products.csv +0 -373
- package/src/downloads/import.ts +0 -381
- package/src/index.ts +0 -140
- package/src/libs/contentful-cda.ts +0 -543
- package/src/libs/contentful.ts +0 -1453
- package/src/libs/imgix.ts +0 -297
- package/src/libs/logs.ts +0 -121
- package/src/libs/netlify.ts +0 -37
- package/src/libs/notifications.ts +0 -104
- package/src/libs/pdf.ts +0 -107
- package/src/libs/s3.ts +0 -305
- package/src/libs/sentry.ts +0 -33
- package/src/pim/config.ts +0 -84
- package/src/pim/data/productFields.json +0 -1178
- package/src/pim/endpoints.ts +0 -364
- package/src/pim/methods/bulkPublish.ts +0 -266
- package/src/pim/methods/catalogs.ts +0 -586
- package/src/pim/methods/checkTopicDraftAndPagePublished.ts +0 -70
- package/src/pim/methods/designers.ts +0 -128
- package/src/pim/methods/dictionary.ts +0 -611
- package/src/pim/methods/families.ts +0 -345
- package/src/pim/methods/latestProducts.ts +0 -70
- package/src/pim/methods/migrateEntryFields.ts +0 -99
- package/src/pim/methods/models.ts +0 -349
- package/src/pim/methods/pages/catalogs.ts +0 -28
- package/src/pim/methods/pages/families.ts +0 -50
- package/src/pim/methods/pages/subfamilies.ts +0 -98
- package/src/pim/methods/products.ts +0 -3297
- package/src/pim/methods/subfamilies.ts +0 -706
- package/src/pim/methods/submodels.ts +0 -262
- package/src/pim/request.ts +0 -61
- package/src/resources/AllProducts.ts +0 -41
- package/src/resources/Audit.ts +0 -24
- package/src/resources/CatalogDetails.ts +0 -51
- package/src/resources/CollectionModels.ts +0 -42
- package/src/resources/CollectionSubFamilies.ts +0 -45
- package/src/resources/CollectionSubModels.ts +0 -36
- package/src/resources/DProductSubLine.ts +0 -34
- package/src/resources/FamilyDetails.ts +0 -31
- package/src/resources/ProductDetails.ts +0 -352
- package/src/resources/ProductRelation.ts +0 -24
- package/src/resources/cfFields.ts +0 -8
- package/src/types.ts +0 -268
- package/src/utils.ts +0 -553
- package/tsconfig.json +0 -93
- package/tslint.json +0 -22
- package/types/libs/puppeteer.d.ts +0 -17
- package/types/pim/methods/checkIp.d.ts +0 -1
- /package/{types → dist}/algolia/clean.d.ts +0 -0
- /package/{types → dist}/algolia/config.d.ts +0 -0
- /package/{types → dist}/algolia/downloads.d.ts +0 -0
- /package/{types → dist}/algolia/families.d.ts +0 -0
- /package/{types → dist}/algolia/inspirations.d.ts +0 -0
- /package/{types → dist}/algolia/models.d.ts +0 -0
- /package/{types → dist}/algolia/news.d.ts +0 -0
- /package/{types → dist}/algolia/pressRelease.d.ts +0 -0
- /package/{types → dist}/algolia/pressReview.d.ts +0 -0
- /package/{types → dist}/algolia/products.d.ts +0 -0
- /package/{types → dist}/algolia/projects.d.ts +0 -0
- /package/{types → dist}/algolia/stories.d.ts +0 -0
- /package/{types → dist}/algolia/subFamilies.d.ts +0 -0
- /package/{types → dist}/algolia/subModels.d.ts +0 -0
- /package/{types → dist}/browser.d.ts +0 -0
- /package/{types → dist}/downloads/classes/manageEntry.d.ts +0 -0
- /package/{types → dist}/downloads/import.d.ts +0 -0
- /package/{types → dist}/index.d.ts +0 -0
- /package/{types → dist}/libs/contentful-cda.d.ts +0 -0
- /package/{types → dist}/libs/contentful.d.ts +0 -0
- /package/{types → dist}/libs/imgix.d.ts +0 -0
- /package/{types → dist}/libs/logs.d.ts +0 -0
- /package/{types → dist}/libs/netlify.d.ts +0 -0
- /package/{types → dist}/libs/notifications.d.ts +0 -0
- /package/{types → dist}/libs/pdf.d.ts +0 -0
- /package/{types → dist}/libs/s3.d.ts +0 -0
- /package/{types → dist}/libs/sentry.d.ts +0 -0
- /package/{types → dist}/pim/config.d.ts +0 -0
- /package/{types → dist}/pim/endpoints.d.ts +0 -0
- /package/{types → dist}/pim/methods/bulkPublish.d.ts +0 -0
- /package/{types → dist}/pim/methods/catalogs.d.ts +0 -0
- /package/{types → dist}/pim/methods/checkTopicDraftAndPagePublished.d.ts +0 -0
- /package/{types → dist}/pim/methods/designers.d.ts +0 -0
- /package/{types → dist}/pim/methods/dictionary.d.ts +0 -0
- /package/{types → dist}/pim/methods/families.d.ts +0 -0
- /package/{types → dist}/pim/methods/latestProducts.d.ts +0 -0
- /package/{types → dist}/pim/methods/migrateEntryFields.d.ts +0 -0
- /package/{types → dist}/pim/methods/models.d.ts +0 -0
- /package/{types → dist}/pim/methods/pages/catalogs.d.ts +0 -0
- /package/{types → dist}/pim/methods/pages/families.d.ts +0 -0
- /package/{types → dist}/pim/methods/pages/subfamilies.d.ts +0 -0
- /package/{types → dist}/pim/methods/products.d.ts +0 -0
- /package/{types → dist}/pim/methods/subfamilies.d.ts +0 -0
- /package/{types → dist}/pim/methods/submodels.d.ts +0 -0
- /package/{types → dist}/pim/request.d.ts +0 -0
- /package/{types → dist}/resources/AllProducts.d.ts +0 -0
- /package/{types → dist}/resources/Audit.d.ts +0 -0
- /package/{types → dist}/resources/CatalogDetails.d.ts +0 -0
- /package/{types → dist}/resources/CollectionModels.d.ts +0 -0
- /package/{types → dist}/resources/CollectionSubFamilies.d.ts +0 -0
- /package/{types → dist}/resources/CollectionSubModels.d.ts +0 -0
- /package/{types → dist}/resources/DProductSubLine.d.ts +0 -0
- /package/{types → dist}/resources/FamilyDetails.d.ts +0 -0
- /package/{types → dist}/resources/ProductDetails.d.ts +0 -0
- /package/{types → dist}/resources/ProductRelation.d.ts +0 -0
- /package/{types → dist}/resources/cfFields.d.ts +0 -0
- /package/{types → dist}/types.d.ts +0 -0
- /package/{types → dist}/utils.d.ts +0 -0
package/src/algolia/news.ts
DELETED
|
@@ -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
|
-
};
|