pim-import 5.0.1 → 5.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 -45
- 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
|
@@ -1,315 +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
|
-
import removeMd from "remove-markdown";
|
|
22
|
-
|
|
23
|
-
const indexKey: AvailableIndicesKey = "inspirations";
|
|
24
|
-
|
|
25
|
-
export type AlgoliaInspirationRecord = {
|
|
26
|
-
objectID: string;
|
|
27
|
-
name?: CfLocalizedEntryField;
|
|
28
|
-
description?: CfLocalizedEntryField;
|
|
29
|
-
excerpt?: CfLocalizedEntryField;
|
|
30
|
-
slugs?: {};
|
|
31
|
-
thumbnailImgix?: WrapperImageFields | {};
|
|
32
|
-
category?: {};
|
|
33
|
-
visualizationDate?: string;
|
|
34
|
-
lastSyncDate?: string;
|
|
35
|
-
hideInRegions?: string[];
|
|
36
|
-
type?: string;
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
const isObjectToDelete = (
|
|
40
|
-
object: any,
|
|
41
|
-
defaultEnvironmentLocaleCode: string
|
|
42
|
-
) => {
|
|
43
|
-
return !object?.slugs?.[defaultEnvironmentLocaleCode];
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
const getObject = async (
|
|
47
|
-
topic: Entry,
|
|
48
|
-
contentTypeId: string
|
|
49
|
-
): Promise<AlgoliaInspirationRecord> => {
|
|
50
|
-
const defaultEnvironmentLocaleCode = await getEnvironmentDefaultLocaleCode();
|
|
51
|
-
log(`Sync the ${topic.sys.id} ${contentTypeId}...`);
|
|
52
|
-
let topicWithFields: Entry = topic;
|
|
53
|
-
|
|
54
|
-
if (!topicWithFields?.fields) {
|
|
55
|
-
log(`Get the ${topic.sys.id} ${contentTypeId} details...`);
|
|
56
|
-
topicWithFields = await getEntryByID(topic.sys.id, contentTypeId);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
if (!topicWithFields) {
|
|
60
|
-
log(`The ${contentTypeId} ${topic.sys.id} not found`, "WARN");
|
|
61
|
-
|
|
62
|
-
const recordFail: AlgoliaInspirationRecord = {
|
|
63
|
-
objectID: topic?.sys?.id,
|
|
64
|
-
};
|
|
65
|
-
|
|
66
|
-
return recordFail; // return objectID to delete the record if it exists
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
const isProject = topicWithFields.sys.contentType.sys.id === "topicProject";
|
|
70
|
-
|
|
71
|
-
log(`Get page details...`);
|
|
72
|
-
const page = await getTopicPage(
|
|
73
|
-
topic.sys.id,
|
|
74
|
-
"fields.slug,fields.protected,fields.hideInRegions"
|
|
75
|
-
);
|
|
76
|
-
|
|
77
|
-
if (!page) {
|
|
78
|
-
log(`The ${contentTypeId} page ${topic.sys.id} not found`, "WARN");
|
|
79
|
-
|
|
80
|
-
const recordFail: AlgoliaInspirationRecord = {
|
|
81
|
-
objectID: topic?.sys?.id,
|
|
82
|
-
};
|
|
83
|
-
|
|
84
|
-
return recordFail; // return objectID to delete the record if it exists
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
const slugs = await getAllTranslations(page?.fields.slug || {});
|
|
88
|
-
|
|
89
|
-
const thumbnailField = isProject ? "thumbnailImgix" : "previewImagesImgix";
|
|
90
|
-
log(`Get ${thumbnailField} details...`);
|
|
91
|
-
let thumbnailImgix = {};
|
|
92
|
-
let thumbnailImgixWrapperImgixID = "";
|
|
93
|
-
if (
|
|
94
|
-
Array.isArray(
|
|
95
|
-
topicWithFields?.fields?.[thumbnailField]?.[defaultEnvironmentLocaleCode]
|
|
96
|
-
)
|
|
97
|
-
) {
|
|
98
|
-
thumbnailImgixWrapperImgixID =
|
|
99
|
-
topicWithFields?.fields?.[thumbnailField]?.[
|
|
100
|
-
defaultEnvironmentLocaleCode
|
|
101
|
-
]?.[0]?.sys?.id;
|
|
102
|
-
} else {
|
|
103
|
-
thumbnailImgixWrapperImgixID =
|
|
104
|
-
topicWithFields?.fields?.[thumbnailField]?.[defaultEnvironmentLocaleCode]
|
|
105
|
-
?.sys?.id;
|
|
106
|
-
}
|
|
107
|
-
if (thumbnailImgixWrapperImgixID) {
|
|
108
|
-
thumbnailImgix = await getWrapperImgixFields(thumbnailImgixWrapperImgixID);
|
|
109
|
-
} else {
|
|
110
|
-
log(`No thumbnail imgix found`, "WARN");
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
log(`Get hideInRegions details...`);
|
|
114
|
-
const hideInRegions =
|
|
115
|
-
page.fields.hideInRegions?.[defaultEnvironmentLocaleCode].map(
|
|
116
|
-
(item: Entry) => item.sys.id
|
|
117
|
-
) || [];
|
|
118
|
-
|
|
119
|
-
const clearExcerpt = {};
|
|
120
|
-
for (const locale in topicWithFields?.fields?.excerpt) {
|
|
121
|
-
if (topicWithFields?.fields?.excerpt?.[locale]) {
|
|
122
|
-
(clearExcerpt as any)[locale] = removeMd(
|
|
123
|
-
topicWithFields?.fields?.excerpt?.[locale]
|
|
124
|
-
);
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
log(`Get category details...`);
|
|
129
|
-
let category = {};
|
|
130
|
-
if (
|
|
131
|
-
!isProject &&
|
|
132
|
-
topicWithFields.fields?.category?.[defaultEnvironmentLocaleCode]?.sys?.id
|
|
133
|
-
) {
|
|
134
|
-
const categoryEntry = await getEntryByID(
|
|
135
|
-
topicWithFields.fields.category[defaultEnvironmentLocaleCode].sys.id,
|
|
136
|
-
"topicStoryCategory"
|
|
137
|
-
);
|
|
138
|
-
if (categoryEntry) {
|
|
139
|
-
category = {
|
|
140
|
-
sysId:
|
|
141
|
-
topicWithFields.fields.category[defaultEnvironmentLocaleCode].sys.id,
|
|
142
|
-
title: await getAllTranslations(categoryEntry?.fields?.title || {}),
|
|
143
|
-
priority: await getAllTranslations(
|
|
144
|
-
categoryEntry?.fields?.priority || {}
|
|
145
|
-
),
|
|
146
|
-
};
|
|
147
|
-
} else {
|
|
148
|
-
log(`No categoryEntry found`, "WARN");
|
|
149
|
-
}
|
|
150
|
-
} else {
|
|
151
|
-
log(`No category found`, "WARN");
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
// Single record
|
|
155
|
-
const emptyLocalizedField: CfLocalizedEntryField = {
|
|
156
|
-
[defaultEnvironmentLocaleCode]: "",
|
|
157
|
-
};
|
|
158
|
-
const record: AlgoliaInspirationRecord = {
|
|
159
|
-
objectID: topicWithFields.sys.id,
|
|
160
|
-
name: await getAllTranslations(
|
|
161
|
-
topicWithFields?.fields?.title || emptyLocalizedField
|
|
162
|
-
),
|
|
163
|
-
excerpt: await getAllTranslations(
|
|
164
|
-
topicWithFields?.fields?.excerpt ? clearExcerpt : emptyLocalizedField
|
|
165
|
-
),
|
|
166
|
-
description: await getAllTranslations(
|
|
167
|
-
topicWithFields?.fields?.description || emptyLocalizedField
|
|
168
|
-
),
|
|
169
|
-
slugs,
|
|
170
|
-
thumbnailImgix,
|
|
171
|
-
category,
|
|
172
|
-
visualizationDate:
|
|
173
|
-
topicWithFields?.fields?.visualizationDate?.[
|
|
174
|
-
defaultEnvironmentLocaleCode
|
|
175
|
-
] || "",
|
|
176
|
-
hideInRegions,
|
|
177
|
-
lastSyncDate: getLocalISOTime(),
|
|
178
|
-
type: isProject ? "project" : "story",
|
|
179
|
-
};
|
|
180
|
-
|
|
181
|
-
return record;
|
|
182
|
-
};
|
|
183
|
-
|
|
184
|
-
export const reindexInspiration = async (topicId: string) => {
|
|
185
|
-
const defaultEnvironmentLocaleCode = await getEnvironmentDefaultLocaleCode();
|
|
186
|
-
const timeStart = new Date();
|
|
187
|
-
|
|
188
|
-
log(`reindexInspiration - entryId: ${topicId} `);
|
|
189
|
-
|
|
190
|
-
let topic = await getEntryByID(topicId, "topicProject");
|
|
191
|
-
topic = !topic ? await getEntryByID(topicId, "topicStory") : topic;
|
|
192
|
-
|
|
193
|
-
const index = getIndex(indexKey);
|
|
194
|
-
let record = null;
|
|
195
|
-
if (!topic) {
|
|
196
|
-
log(`No topic found with id ${topicId}. Delete object if exists`, "WARN");
|
|
197
|
-
record = await index.deleteObject(topicId);
|
|
198
|
-
return { ...record };
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
const object = await getObject(topic, topic.sys.contentType.sys.id);
|
|
202
|
-
|
|
203
|
-
// Save record to Algolia
|
|
204
|
-
if (!isObjectToDelete(object, defaultEnvironmentLocaleCode)) {
|
|
205
|
-
log(`Save object`);
|
|
206
|
-
record = await index.saveObject(object);
|
|
207
|
-
} else {
|
|
208
|
-
log(`Delete object`);
|
|
209
|
-
record = await index.deleteObject(object.objectID);
|
|
210
|
-
}
|
|
211
|
-
const timeEnd = new Date();
|
|
212
|
-
const seconds = secondBetweenTwoDate(timeStart, timeEnd);
|
|
213
|
-
log(`Execution time: ${seconds} seconds`);
|
|
214
|
-
|
|
215
|
-
return { ...record, ...object };
|
|
216
|
-
};
|
|
217
|
-
|
|
218
|
-
/**
|
|
219
|
-
* Get Objects
|
|
220
|
-
*
|
|
221
|
-
* @param offset
|
|
222
|
-
* @param limit
|
|
223
|
-
* @param filterKey
|
|
224
|
-
* @param filterValue
|
|
225
|
-
* @returns
|
|
226
|
-
*/
|
|
227
|
-
const getObjects = async (
|
|
228
|
-
offset: number,
|
|
229
|
-
limit: number,
|
|
230
|
-
filterKey?: string,
|
|
231
|
-
filterValue?: string
|
|
232
|
-
): Promise<AlgoliaPaginateRecords> => {
|
|
233
|
-
const client = await getClient();
|
|
234
|
-
|
|
235
|
-
const opts: any = {
|
|
236
|
-
content_type: "topicProject",
|
|
237
|
-
limit,
|
|
238
|
-
skip: offset,
|
|
239
|
-
// select: "",
|
|
240
|
-
};
|
|
241
|
-
if (filterKey && filterValue) {
|
|
242
|
-
opts[filterKey] = filterValue;
|
|
243
|
-
}
|
|
244
|
-
const { items: projectItems, total: projectTotal } =
|
|
245
|
-
await client.withAllLocales.getEntries(opts);
|
|
246
|
-
opts.content_type = "topicStory";
|
|
247
|
-
const { items: storyItems, total: stotyTotal } =
|
|
248
|
-
await client.withAllLocales.getEntries(opts);
|
|
249
|
-
const items = [...projectItems, ...storyItems];
|
|
250
|
-
const total = projectTotal + stotyTotal;
|
|
251
|
-
|
|
252
|
-
const objects: AlgoliaInspirationRecord[] = [];
|
|
253
|
-
let count: number = Number(offset);
|
|
254
|
-
for (const topic of items) {
|
|
255
|
-
log(`${++count} of ${total}`, "INFO");
|
|
256
|
-
const timeStart = new Date();
|
|
257
|
-
const record = await getObject(topic, topic.sys.contentType.sys.id);
|
|
258
|
-
const timeEnd = new Date();
|
|
259
|
-
const seconds = secondBetweenTwoDate(timeStart, timeEnd);
|
|
260
|
-
log(`Execution time: ${seconds} seconds`);
|
|
261
|
-
objects.push(record);
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
return {
|
|
265
|
-
objects,
|
|
266
|
-
offset: Number(offset) + Number(limit),
|
|
267
|
-
limit: Number(limit),
|
|
268
|
-
completed: count >= total, // if is true the import is completed
|
|
269
|
-
total,
|
|
270
|
-
};
|
|
271
|
-
};
|
|
272
|
-
|
|
273
|
-
export const reindexInspirations = async (
|
|
274
|
-
offset: number = 0,
|
|
275
|
-
limit: number = 50,
|
|
276
|
-
filterKey: string = "",
|
|
277
|
-
filterValue: string = ""
|
|
278
|
-
) => {
|
|
279
|
-
const defaultEnvironmentLocaleCode = await getEnvironmentDefaultLocaleCode();
|
|
280
|
-
const timeStart = new Date();
|
|
281
|
-
log(
|
|
282
|
-
`reindexInspirations - filterKey: ${filterKey} filterValue: ${filterValue} offset: ${offset} limit: ${limit} `
|
|
283
|
-
);
|
|
284
|
-
|
|
285
|
-
const records = await getObjects(offset, limit, filterKey, filterValue);
|
|
286
|
-
const objectsToSave = records.objects.filter(
|
|
287
|
-
(object) => !isObjectToDelete(object, defaultEnvironmentLocaleCode)
|
|
288
|
-
);
|
|
289
|
-
const objectIdsToDelete = records.objects
|
|
290
|
-
.filter((object) => isObjectToDelete(object, defaultEnvironmentLocaleCode))
|
|
291
|
-
.map((object) => object.objectID);
|
|
292
|
-
|
|
293
|
-
// Save records to Algolia
|
|
294
|
-
const index = getIndex(indexKey);
|
|
295
|
-
log(`Save ${objectsToSave.length} objects to ${index.indexName} index`);
|
|
296
|
-
const savedObjectIDs = await index.saveObjects(objectsToSave);
|
|
297
|
-
log(
|
|
298
|
-
`Delete ${objectIdsToDelete.length} objects from ${index.indexName} index`
|
|
299
|
-
);
|
|
300
|
-
const deletedObjectIDs = await index.deleteObjects(objectIdsToDelete);
|
|
301
|
-
|
|
302
|
-
const timeEnd = new Date();
|
|
303
|
-
const seconds = secondBetweenTwoDate(timeStart, timeEnd);
|
|
304
|
-
log(`Execution time: ${seconds} seconds`);
|
|
305
|
-
|
|
306
|
-
return {
|
|
307
|
-
...records,
|
|
308
|
-
savedObjectIDs: savedObjectIDs.objectIDs,
|
|
309
|
-
deletedObjectIDs: deletedObjectIDs.objectIDs,
|
|
310
|
-
};
|
|
311
|
-
};
|
|
312
|
-
|
|
313
|
-
export const removeInspirationObject = async (objectId: string) => {
|
|
314
|
-
return removeIndexObject(objectId, indexKey);
|
|
315
|
-
};
|