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/projects.ts
DELETED
|
@@ -1,339 +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 { cfLocales } from "../libs/contentful";
|
|
9
|
-
import { getIndex, AvailableIndicesKey, removeIndexObject } from "./config";
|
|
10
|
-
import {
|
|
11
|
-
getAllTranslations,
|
|
12
|
-
getLocalISOTime,
|
|
13
|
-
secondBetweenTwoDate,
|
|
14
|
-
} from "../utils";
|
|
15
|
-
import type { Entry } from "contentful-management/dist/typings/entities/entry";
|
|
16
|
-
import {
|
|
17
|
-
CfLocalizedEntryField,
|
|
18
|
-
AlgoliaPaginateRecords,
|
|
19
|
-
WrapperImageFields,
|
|
20
|
-
} from "../types";
|
|
21
|
-
import { getWrapperImgixFields } from "../libs/imgix";
|
|
22
|
-
|
|
23
|
-
const indexKey: AvailableIndicesKey = "projects";
|
|
24
|
-
|
|
25
|
-
export type AlgoliaProjectRecord = {
|
|
26
|
-
objectID: string;
|
|
27
|
-
name?: CfLocalizedEntryField;
|
|
28
|
-
slugs?: {};
|
|
29
|
-
isProtected?: boolean;
|
|
30
|
-
isBespoke?: boolean;
|
|
31
|
-
categories?: string[];
|
|
32
|
-
categoriesLocalized?: {};
|
|
33
|
-
applications?: string[];
|
|
34
|
-
locations?: string[];
|
|
35
|
-
thumbnailImgix?: WrapperImageFields | {};
|
|
36
|
-
fullPageImageImgix?: WrapperImageFields | {};
|
|
37
|
-
locationLabel?: string;
|
|
38
|
-
casambiUsed?: boolean;
|
|
39
|
-
visualizationDate?: string;
|
|
40
|
-
location?: {};
|
|
41
|
-
lastSyncDate?: string;
|
|
42
|
-
hideInRegions?: string[];
|
|
43
|
-
};
|
|
44
|
-
|
|
45
|
-
const isObjectToDelete = (
|
|
46
|
-
object: any,
|
|
47
|
-
defaultEnvironmentLocaleCode: string
|
|
48
|
-
) => {
|
|
49
|
-
return !object?.slugs?.[defaultEnvironmentLocaleCode];
|
|
50
|
-
};
|
|
51
|
-
|
|
52
|
-
const getObject = async (
|
|
53
|
-
topicProject: Entry
|
|
54
|
-
): Promise<AlgoliaProjectRecord> => {
|
|
55
|
-
const defaultEnvironmentLocaleCode = await getEnvironmentDefaultLocaleCode();
|
|
56
|
-
log(`Sync the ${topicProject.sys.id} topicProject...`);
|
|
57
|
-
let topicProjectWithFields: Entry = topicProject;
|
|
58
|
-
|
|
59
|
-
if (!topicProjectWithFields?.fields) {
|
|
60
|
-
log(`Get the ${topicProject.sys.id} topicProject details...`);
|
|
61
|
-
topicProjectWithFields = await getEntryByID(
|
|
62
|
-
topicProject.sys.id,
|
|
63
|
-
"topicProject"
|
|
64
|
-
);
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
if (!topicProjectWithFields) {
|
|
68
|
-
log(`The topicProject ${topicProject.sys.id} not found`, "WARN");
|
|
69
|
-
|
|
70
|
-
const recordFail: AlgoliaProjectRecord = {
|
|
71
|
-
objectID: topicProject?.sys?.id,
|
|
72
|
-
};
|
|
73
|
-
|
|
74
|
-
return recordFail; // return objectID to delete the record if it exists
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
log(`Get page details...`);
|
|
78
|
-
const page = await getTopicPage(
|
|
79
|
-
topicProject.sys.id,
|
|
80
|
-
"fields.slug,fields.protected,fields.hideInRegions"
|
|
81
|
-
);
|
|
82
|
-
|
|
83
|
-
if (!page) {
|
|
84
|
-
log(`The topicProject page ${topicProject.sys.id} not found`, "WARN");
|
|
85
|
-
|
|
86
|
-
const recordFail: AlgoliaProjectRecord = {
|
|
87
|
-
objectID: topicProject?.sys?.id,
|
|
88
|
-
};
|
|
89
|
-
|
|
90
|
-
return recordFail; // return objectID to delete the record if it exists
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
const slugs = await getAllTranslations(page?.fields.slug || {});
|
|
94
|
-
const isProtected = !!page?.fields?.protected?.[defaultEnvironmentLocaleCode];
|
|
95
|
-
|
|
96
|
-
log(`Get thumbnail imgix details...`);
|
|
97
|
-
let thumbnailImgix = {};
|
|
98
|
-
const thumbnailImgixWrapperImgixID =
|
|
99
|
-
topicProjectWithFields?.fields?.thumbnailImgix?.[
|
|
100
|
-
defaultEnvironmentLocaleCode
|
|
101
|
-
]?.sys.id;
|
|
102
|
-
if (thumbnailImgixWrapperImgixID) {
|
|
103
|
-
thumbnailImgix = await getWrapperImgixFields(thumbnailImgixWrapperImgixID);
|
|
104
|
-
} else {
|
|
105
|
-
log(`No thumbnail imgix found`, "WARN");
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
log(`Get fullPageImage imgix details...`);
|
|
109
|
-
let fullPageImageImgix = {};
|
|
110
|
-
const fullPageImageImgixWrapperImgixID =
|
|
111
|
-
topicProjectWithFields?.fields?.fullPageImageImgix?.[
|
|
112
|
-
defaultEnvironmentLocaleCode
|
|
113
|
-
]?.sys.id;
|
|
114
|
-
if (fullPageImageImgixWrapperImgixID) {
|
|
115
|
-
fullPageImageImgix = await getWrapperImgixFields(
|
|
116
|
-
fullPageImageImgixWrapperImgixID
|
|
117
|
-
);
|
|
118
|
-
} else {
|
|
119
|
-
log(`No fullPageImage imgix found`, "WARN");
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
log(`Get categories details...`);
|
|
123
|
-
const categories: string[] = [];
|
|
124
|
-
const categoriesLocalized: any = {};
|
|
125
|
-
const categoriesIDs = topicProjectWithFields?.fields?.categories?.[
|
|
126
|
-
defaultEnvironmentLocaleCode
|
|
127
|
-
]?.map((category: Entry) => category.sys.id);
|
|
128
|
-
if (categoriesIDs?.length) {
|
|
129
|
-
for (const categoryID of categoriesIDs) {
|
|
130
|
-
const category = await getEntryByID(
|
|
131
|
-
categoryID,
|
|
132
|
-
"topicProjectCategory",
|
|
133
|
-
"fields.title"
|
|
134
|
-
);
|
|
135
|
-
categories.push(
|
|
136
|
-
category?.fields?.title?.[defaultEnvironmentLocaleCode] || ""
|
|
137
|
-
);
|
|
138
|
-
for (const locale of cfLocales) {
|
|
139
|
-
if (!categoriesLocalized?.locale) categoriesLocalized[locale] = [];
|
|
140
|
-
|
|
141
|
-
categoriesLocalized[locale].push(
|
|
142
|
-
category?.fields?.title?.[locale] ||
|
|
143
|
-
category?.fields?.title?.[defaultEnvironmentLocaleCode]
|
|
144
|
-
);
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
} else {
|
|
148
|
-
log(`No categories found`, "WARN");
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
log(`Get location details...`);
|
|
152
|
-
let location = {};
|
|
153
|
-
if (
|
|
154
|
-
topicProjectWithFields?.fields?.location?.[defaultEnvironmentLocaleCode]
|
|
155
|
-
) {
|
|
156
|
-
location =
|
|
157
|
-
topicProjectWithFields?.fields?.location?.[defaultEnvironmentLocaleCode];
|
|
158
|
-
} else {
|
|
159
|
-
log(`No location found`, "WARN");
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
log(`Get hideInRegions details...`);
|
|
163
|
-
const hideInRegions =
|
|
164
|
-
page.fields.hideInRegions?.[defaultEnvironmentLocaleCode].map(
|
|
165
|
-
(item: Entry) => item.sys.id
|
|
166
|
-
) || [];
|
|
167
|
-
|
|
168
|
-
// Single record
|
|
169
|
-
const record: AlgoliaProjectRecord = {
|
|
170
|
-
objectID: topicProjectWithFields.sys.id,
|
|
171
|
-
name:
|
|
172
|
-
topicProjectWithFields?.fields?.title?.[defaultEnvironmentLocaleCode] ||
|
|
173
|
-
"",
|
|
174
|
-
slugs,
|
|
175
|
-
isProtected,
|
|
176
|
-
isBespoke:
|
|
177
|
-
!!topicProjectWithFields?.fields?.isBespokeProject?.[
|
|
178
|
-
defaultEnvironmentLocaleCode
|
|
179
|
-
],
|
|
180
|
-
categories,
|
|
181
|
-
categoriesLocalized,
|
|
182
|
-
applications:
|
|
183
|
-
topicProjectWithFields?.fields?.applications?.[
|
|
184
|
-
defaultEnvironmentLocaleCode
|
|
185
|
-
] || [],
|
|
186
|
-
locations:
|
|
187
|
-
topicProjectWithFields?.fields?.locations?.[
|
|
188
|
-
defaultEnvironmentLocaleCode
|
|
189
|
-
] || [],
|
|
190
|
-
locationLabel:
|
|
191
|
-
topicProjectWithFields?.fields?.locationLabel?.[
|
|
192
|
-
defaultEnvironmentLocaleCode
|
|
193
|
-
] || "",
|
|
194
|
-
casambiUsed:
|
|
195
|
-
!!topicProjectWithFields?.fields?.casambiUseInThisProject?.[
|
|
196
|
-
defaultEnvironmentLocaleCode
|
|
197
|
-
],
|
|
198
|
-
thumbnailImgix,
|
|
199
|
-
fullPageImageImgix,
|
|
200
|
-
visualizationDate:
|
|
201
|
-
topicProjectWithFields?.fields?.visualizationDate?.[
|
|
202
|
-
defaultEnvironmentLocaleCode
|
|
203
|
-
] || "",
|
|
204
|
-
location,
|
|
205
|
-
hideInRegions,
|
|
206
|
-
lastSyncDate: getLocalISOTime(),
|
|
207
|
-
};
|
|
208
|
-
|
|
209
|
-
return record;
|
|
210
|
-
};
|
|
211
|
-
|
|
212
|
-
export const reindexProject = async (topicProjectId: string) => {
|
|
213
|
-
const defaultEnvironmentLocaleCode = await getEnvironmentDefaultLocaleCode();
|
|
214
|
-
const timeStart = new Date();
|
|
215
|
-
|
|
216
|
-
log(`reindexProject - entryId: ${topicProjectId} `);
|
|
217
|
-
|
|
218
|
-
const topicProject = await getEntryByID(topicProjectId, "topicProject");
|
|
219
|
-
|
|
220
|
-
const index = getIndex(indexKey);
|
|
221
|
-
let record = null;
|
|
222
|
-
if (!topicProject) {
|
|
223
|
-
log(
|
|
224
|
-
`No topicProjectId found with id ${topicProjectId}. Delete object if exists`,
|
|
225
|
-
"WARN"
|
|
226
|
-
);
|
|
227
|
-
record = await index.deleteObject(topicProjectId);
|
|
228
|
-
return { ...record };
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
const object = await getObject(topicProject);
|
|
232
|
-
|
|
233
|
-
// Save record to Algolia
|
|
234
|
-
if (!isObjectToDelete(object, defaultEnvironmentLocaleCode)) {
|
|
235
|
-
log(`Save object`);
|
|
236
|
-
record = await index.saveObject(object);
|
|
237
|
-
} else {
|
|
238
|
-
log(`Delete object`);
|
|
239
|
-
record = await index.deleteObject(object.objectID);
|
|
240
|
-
}
|
|
241
|
-
const timeEnd = new Date();
|
|
242
|
-
const seconds = secondBetweenTwoDate(timeStart, timeEnd);
|
|
243
|
-
log(`Execution time: ${seconds} seconds`);
|
|
244
|
-
|
|
245
|
-
return { ...record, ...object };
|
|
246
|
-
};
|
|
247
|
-
|
|
248
|
-
/**
|
|
249
|
-
* Get Objects
|
|
250
|
-
*
|
|
251
|
-
* @param offset
|
|
252
|
-
* @param limit
|
|
253
|
-
* @param filterKey
|
|
254
|
-
* @param filterValue
|
|
255
|
-
* @returns
|
|
256
|
-
*/
|
|
257
|
-
const getObjects = async (
|
|
258
|
-
offset: number,
|
|
259
|
-
limit: number,
|
|
260
|
-
filterKey?: string,
|
|
261
|
-
filterValue?: string
|
|
262
|
-
): Promise<AlgoliaPaginateRecords> => {
|
|
263
|
-
const client = await getClient();
|
|
264
|
-
|
|
265
|
-
const opts: any = {
|
|
266
|
-
content_type: "topicProject",
|
|
267
|
-
limit,
|
|
268
|
-
skip: offset,
|
|
269
|
-
// select: "",
|
|
270
|
-
};
|
|
271
|
-
if (filterKey && filterValue) {
|
|
272
|
-
opts[filterKey] = filterValue;
|
|
273
|
-
}
|
|
274
|
-
const { items, total } = await client.withAllLocales.getEntries(opts);
|
|
275
|
-
|
|
276
|
-
const objects: AlgoliaProjectRecord[] = [];
|
|
277
|
-
let count: number = Number(offset);
|
|
278
|
-
for (const topicProduct of items) {
|
|
279
|
-
log(`${++count} of ${total}`, "INFO");
|
|
280
|
-
const timeStart = new Date();
|
|
281
|
-
const record = await getObject(topicProduct);
|
|
282
|
-
const timeEnd = new Date();
|
|
283
|
-
const seconds = secondBetweenTwoDate(timeStart, timeEnd);
|
|
284
|
-
log(`Execution time: ${seconds} seconds`);
|
|
285
|
-
objects.push(record);
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
return {
|
|
289
|
-
objects,
|
|
290
|
-
offset: Number(offset) + Number(limit),
|
|
291
|
-
limit: Number(limit),
|
|
292
|
-
completed: count >= total, // if is true the import is completed
|
|
293
|
-
total,
|
|
294
|
-
};
|
|
295
|
-
};
|
|
296
|
-
|
|
297
|
-
export const reindexProjects = async (
|
|
298
|
-
offset: number = 0,
|
|
299
|
-
limit: number = 50,
|
|
300
|
-
filterKey: string = "",
|
|
301
|
-
filterValue: string = ""
|
|
302
|
-
) => {
|
|
303
|
-
const defaultEnvironmentLocaleCode = await getEnvironmentDefaultLocaleCode();
|
|
304
|
-
const timeStart = new Date();
|
|
305
|
-
log(
|
|
306
|
-
`reindexProjects - filterKey: ${filterKey} filterValue: ${filterValue} offset: ${offset} limit: ${limit} `
|
|
307
|
-
);
|
|
308
|
-
|
|
309
|
-
const records = await getObjects(offset, limit, filterKey, filterValue);
|
|
310
|
-
const objectsToSave = records.objects.filter(
|
|
311
|
-
(object) => !isObjectToDelete(object, defaultEnvironmentLocaleCode)
|
|
312
|
-
);
|
|
313
|
-
const objectIdsToDelete = records.objects
|
|
314
|
-
.filter((object) => isObjectToDelete(object, defaultEnvironmentLocaleCode))
|
|
315
|
-
.map((object) => object.objectID);
|
|
316
|
-
|
|
317
|
-
// Save records to Algolia
|
|
318
|
-
const index = getIndex(indexKey);
|
|
319
|
-
log(`Save ${objectsToSave.length} objects to ${index.indexName} index`);
|
|
320
|
-
const savedObjectIDs = await index.saveObjects(objectsToSave);
|
|
321
|
-
log(
|
|
322
|
-
`Delete ${objectIdsToDelete.length} objects from ${index.indexName} index`
|
|
323
|
-
);
|
|
324
|
-
const deletedObjectIDs = await index.deleteObjects(objectIdsToDelete);
|
|
325
|
-
|
|
326
|
-
const timeEnd = new Date();
|
|
327
|
-
const seconds = secondBetweenTwoDate(timeStart, timeEnd);
|
|
328
|
-
log(`Execution time: ${seconds} seconds`);
|
|
329
|
-
|
|
330
|
-
return {
|
|
331
|
-
...records,
|
|
332
|
-
savedObjectIDs: savedObjectIDs.objectIDs,
|
|
333
|
-
deletedObjectIDs: deletedObjectIDs.objectIDs,
|
|
334
|
-
};
|
|
335
|
-
};
|
|
336
|
-
|
|
337
|
-
export const removeProjectObject = async (objectId: string) => {
|
|
338
|
-
return removeIndexObject(objectId, indexKey);
|
|
339
|
-
};
|
package/src/algolia/stories.ts
DELETED
|
@@ -1,347 +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 = "stories";
|
|
24
|
-
|
|
25
|
-
export type AlgoliaStoryRecord = {
|
|
26
|
-
objectID: string;
|
|
27
|
-
name?: CfLocalizedEntryField;
|
|
28
|
-
excerpt?: CfLocalizedEntryField;
|
|
29
|
-
previewExcerpt?: CfLocalizedEntryField;
|
|
30
|
-
description?: CfLocalizedEntryField;
|
|
31
|
-
slugs?: {};
|
|
32
|
-
isProtected?: boolean;
|
|
33
|
-
fullScreenImageImgix?: WrapperImageFields | {};
|
|
34
|
-
previewImagesImgix?: any;
|
|
35
|
-
video?: {};
|
|
36
|
-
category?: {};
|
|
37
|
-
previewLayout?: string;
|
|
38
|
-
visualizationDate?: string;
|
|
39
|
-
lastSyncDate?: string;
|
|
40
|
-
hideInRegions?: string[];
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
const isObjectToDelete = (
|
|
44
|
-
object: any,
|
|
45
|
-
defaultEnvironmentLocaleCode: string
|
|
46
|
-
) => {
|
|
47
|
-
return !object?.slugs?.[defaultEnvironmentLocaleCode];
|
|
48
|
-
};
|
|
49
|
-
|
|
50
|
-
const getObject = async (topicStory: Entry): Promise<AlgoliaStoryRecord> => {
|
|
51
|
-
const defaultEnvironmentLocaleCode = await getEnvironmentDefaultLocaleCode();
|
|
52
|
-
log(`Sync the ${topicStory.sys.id} topicStory...`);
|
|
53
|
-
let topicStoryWithFields: Entry = topicStory;
|
|
54
|
-
|
|
55
|
-
const emptyLocalizedField: CfLocalizedEntryField = {
|
|
56
|
-
[defaultEnvironmentLocaleCode]: "",
|
|
57
|
-
};
|
|
58
|
-
|
|
59
|
-
if (!topicStoryWithFields?.fields) {
|
|
60
|
-
log(`Get the ${topicStory.sys.id} topicStory details...`);
|
|
61
|
-
topicStoryWithFields = await getEntryByID(topicStory.sys.id, "topicStory");
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
if (!topicStoryWithFields) {
|
|
65
|
-
log(`The topicStory ${topicStory.sys.id} not found`, "WARN");
|
|
66
|
-
|
|
67
|
-
const recordFail: AlgoliaStoryRecord = {
|
|
68
|
-
objectID: topicStory?.sys?.id,
|
|
69
|
-
};
|
|
70
|
-
|
|
71
|
-
return recordFail; // return objectID to delete the record if it exists
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
log(`Get page details...`);
|
|
75
|
-
const page = await getTopicPage(
|
|
76
|
-
topicStory.sys.id,
|
|
77
|
-
"fields.slug,fields.protected,fields.hideInRegions"
|
|
78
|
-
);
|
|
79
|
-
|
|
80
|
-
if (!page) {
|
|
81
|
-
log(`The topicStory page ${topicStory.sys.id} not found`, "WARN");
|
|
82
|
-
|
|
83
|
-
const recordFail: AlgoliaStoryRecord = {
|
|
84
|
-
objectID: topicStory?.sys?.id,
|
|
85
|
-
};
|
|
86
|
-
|
|
87
|
-
return recordFail; // return objectID to delete the record if it exists
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
const slugs = await getAllTranslations(page?.fields.slug || {});
|
|
91
|
-
const isProtected = !!page?.fields?.protected?.[defaultEnvironmentLocaleCode];
|
|
92
|
-
|
|
93
|
-
log(`Get Full Screen Image Imgix details...`);
|
|
94
|
-
let fullScreenImageImgix = {};
|
|
95
|
-
const fullScreenImageImgixWrapperImgixID =
|
|
96
|
-
topicStory?.fields?.fullScreenImageImgix?.[defaultEnvironmentLocaleCode]
|
|
97
|
-
?.sys.id;
|
|
98
|
-
if (fullScreenImageImgixWrapperImgixID) {
|
|
99
|
-
fullScreenImageImgix = await getWrapperImgixFields(
|
|
100
|
-
fullScreenImageImgixWrapperImgixID
|
|
101
|
-
);
|
|
102
|
-
} else {
|
|
103
|
-
log(`No Full Screen Image Imgix found`, "WARN");
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
log(`Get Preview Images Imgix details...`);
|
|
107
|
-
const previewImagesImgix = [];
|
|
108
|
-
if (topicStory?.fields?.previewImagesImgix?.[defaultEnvironmentLocaleCode]) {
|
|
109
|
-
for (const previewImageImgix of topicStory.fields.previewImagesImgix[
|
|
110
|
-
defaultEnvironmentLocaleCode
|
|
111
|
-
]) {
|
|
112
|
-
const previewImagesImgixWrapperImgixID = previewImageImgix?.sys.id;
|
|
113
|
-
if (previewImagesImgixWrapperImgixID) {
|
|
114
|
-
const currentPreviewImagesImgix = await getWrapperImgixFields(
|
|
115
|
-
previewImagesImgixWrapperImgixID
|
|
116
|
-
);
|
|
117
|
-
previewImagesImgix.push(currentPreviewImagesImgix);
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
} else {
|
|
121
|
-
log(`No Preview Images Imgix found`, "WARN");
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
log(`Get videoId details...`);
|
|
125
|
-
let video = {};
|
|
126
|
-
if (topicStory.fields?.video?.[defaultEnvironmentLocaleCode]?.sys?.id) {
|
|
127
|
-
const componentVideo = await getEntryByID(
|
|
128
|
-
topicStory.fields.video[defaultEnvironmentLocaleCode].sys.id,
|
|
129
|
-
"componentVideo"
|
|
130
|
-
);
|
|
131
|
-
let posterImage = {};
|
|
132
|
-
if (
|
|
133
|
-
componentVideo?.fields?.posterImgix?.[defaultEnvironmentLocaleCode]?.sys
|
|
134
|
-
?.id
|
|
135
|
-
) {
|
|
136
|
-
const posterImgixId =
|
|
137
|
-
componentVideo?.fields?.posterImgix?.[defaultEnvironmentLocaleCode]?.sys
|
|
138
|
-
.id;
|
|
139
|
-
posterImage = await getWrapperImgixFields(posterImgixId);
|
|
140
|
-
}
|
|
141
|
-
video = {
|
|
142
|
-
id: componentVideo?.fields?.videoId?.[defaultEnvironmentLocaleCode] || "",
|
|
143
|
-
type: componentVideo?.fields?.type?.[defaultEnvironmentLocaleCode] || "",
|
|
144
|
-
posterImage,
|
|
145
|
-
};
|
|
146
|
-
} else {
|
|
147
|
-
log(`No videoId found`, "WARN");
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
log(`Get category details...`);
|
|
151
|
-
let category = {};
|
|
152
|
-
if (topicStory.fields?.category?.[defaultEnvironmentLocaleCode]?.sys?.id) {
|
|
153
|
-
const categoryEntry = await getEntryByID(
|
|
154
|
-
topicStory.fields.category[defaultEnvironmentLocaleCode].sys.id,
|
|
155
|
-
"topicStoryCategory"
|
|
156
|
-
);
|
|
157
|
-
if (categoryEntry) {
|
|
158
|
-
category = {
|
|
159
|
-
sysId: topicStory.fields.category[defaultEnvironmentLocaleCode].sys.id,
|
|
160
|
-
title: await getAllTranslations(categoryEntry?.fields?.title || {}),
|
|
161
|
-
priority: await getAllTranslations(
|
|
162
|
-
categoryEntry?.fields?.priority || {}
|
|
163
|
-
),
|
|
164
|
-
};
|
|
165
|
-
} else {
|
|
166
|
-
log(`No categoryEntry found`, "WARN");
|
|
167
|
-
}
|
|
168
|
-
} else {
|
|
169
|
-
log(`No category found`, "WARN");
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
const clearExcerpt = {};
|
|
173
|
-
for (const locale in topicStoryWithFields?.fields?.excerpt) {
|
|
174
|
-
if (topicStoryWithFields?.fields?.excerpt?.[locale]) {
|
|
175
|
-
(clearExcerpt as any)[locale] = removeMd(
|
|
176
|
-
topicStoryWithFields?.fields?.excerpt?.[locale]
|
|
177
|
-
);
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
log(`Get hideInRegions details...`);
|
|
182
|
-
const hideInRegions =
|
|
183
|
-
page.fields.hideInRegions?.[defaultEnvironmentLocaleCode].map(
|
|
184
|
-
(item: Entry) => item.sys.id
|
|
185
|
-
) || [];
|
|
186
|
-
|
|
187
|
-
// Single record
|
|
188
|
-
const record: AlgoliaStoryRecord = {
|
|
189
|
-
objectID: topicStoryWithFields.sys.id,
|
|
190
|
-
name: await getAllTranslations(
|
|
191
|
-
topicStoryWithFields?.fields?.title || emptyLocalizedField
|
|
192
|
-
),
|
|
193
|
-
excerpt: await getAllTranslations(
|
|
194
|
-
topicStoryWithFields?.fields?.excerpt ? clearExcerpt : emptyLocalizedField
|
|
195
|
-
),
|
|
196
|
-
description: await getAllTranslations(
|
|
197
|
-
topicStoryWithFields?.fields?.description || emptyLocalizedField
|
|
198
|
-
),
|
|
199
|
-
slugs,
|
|
200
|
-
isProtected,
|
|
201
|
-
fullScreenImageImgix,
|
|
202
|
-
previewImagesImgix,
|
|
203
|
-
video,
|
|
204
|
-
category,
|
|
205
|
-
previewLayout:
|
|
206
|
-
topicStoryWithFields?.fields?.previewLayout?.[
|
|
207
|
-
defaultEnvironmentLocaleCode
|
|
208
|
-
] || "",
|
|
209
|
-
visualizationDate:
|
|
210
|
-
topicStoryWithFields?.fields?.visualizationDate?.[
|
|
211
|
-
defaultEnvironmentLocaleCode
|
|
212
|
-
] || "",
|
|
213
|
-
hideInRegions,
|
|
214
|
-
lastSyncDate: getLocalISOTime(),
|
|
215
|
-
};
|
|
216
|
-
|
|
217
|
-
return record;
|
|
218
|
-
};
|
|
219
|
-
|
|
220
|
-
export const reindexStory = async (topicStoryId: string) => {
|
|
221
|
-
const defaultEnvironmentLocaleCode = await getEnvironmentDefaultLocaleCode();
|
|
222
|
-
const timeStart = new Date();
|
|
223
|
-
|
|
224
|
-
log(`reindexStory - entryId: ${topicStoryId} `);
|
|
225
|
-
|
|
226
|
-
const topicStory = await getEntryByID(topicStoryId, "topicStory");
|
|
227
|
-
|
|
228
|
-
const index = getIndex(indexKey);
|
|
229
|
-
let record = null;
|
|
230
|
-
if (!topicStory) {
|
|
231
|
-
log(
|
|
232
|
-
`No topicStoryId found with id ${topicStoryId}. Delete object if exists`,
|
|
233
|
-
"WARN"
|
|
234
|
-
);
|
|
235
|
-
record = await index.deleteObject(topicStoryId);
|
|
236
|
-
return { ...record };
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
const object = await getObject(topicStory);
|
|
240
|
-
|
|
241
|
-
// Save record to Algolia
|
|
242
|
-
if (!isObjectToDelete(object, defaultEnvironmentLocaleCode)) {
|
|
243
|
-
log(`Save object to ${index.indexName} index`);
|
|
244
|
-
record = await index.saveObject(object);
|
|
245
|
-
} else {
|
|
246
|
-
log(`Delete object from ${index.indexName} index`);
|
|
247
|
-
record = await index.deleteObject(object.objectID);
|
|
248
|
-
}
|
|
249
|
-
const timeEnd = new Date();
|
|
250
|
-
const seconds = secondBetweenTwoDate(timeStart, timeEnd);
|
|
251
|
-
log(`Execution time: ${seconds} seconds`);
|
|
252
|
-
|
|
253
|
-
return { ...record, ...object };
|
|
254
|
-
};
|
|
255
|
-
|
|
256
|
-
/**
|
|
257
|
-
* Get Objects
|
|
258
|
-
*
|
|
259
|
-
* @param offset
|
|
260
|
-
* @param limit
|
|
261
|
-
* @param filterKey
|
|
262
|
-
* @param filterValue
|
|
263
|
-
* @returns
|
|
264
|
-
*/
|
|
265
|
-
const getObjects = async (
|
|
266
|
-
offset: number,
|
|
267
|
-
limit: number,
|
|
268
|
-
filterKey?: string,
|
|
269
|
-
filterValue?: string
|
|
270
|
-
): Promise<AlgoliaPaginateRecords> => {
|
|
271
|
-
const client = await getClient();
|
|
272
|
-
|
|
273
|
-
const opts: any = {
|
|
274
|
-
content_type: "topicStory",
|
|
275
|
-
limit,
|
|
276
|
-
skip: offset,
|
|
277
|
-
// select: "",
|
|
278
|
-
};
|
|
279
|
-
if (filterKey && filterValue) {
|
|
280
|
-
opts[filterKey] = filterValue;
|
|
281
|
-
}
|
|
282
|
-
const { items, total } = await client.withAllLocales.getEntries(opts);
|
|
283
|
-
|
|
284
|
-
const objects: AlgoliaStoryRecord[] = [];
|
|
285
|
-
let count: number = Number(offset);
|
|
286
|
-
for (const topicStory of items) {
|
|
287
|
-
log(`${++count} of ${total}`, "INFO");
|
|
288
|
-
const timeStart = new Date();
|
|
289
|
-
const record = await getObject(topicStory);
|
|
290
|
-
const timeEnd = new Date();
|
|
291
|
-
const seconds = secondBetweenTwoDate(timeStart, timeEnd);
|
|
292
|
-
log(`Execution time: ${seconds} seconds`);
|
|
293
|
-
objects.push(record);
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
return {
|
|
297
|
-
objects,
|
|
298
|
-
offset: Number(offset) + Number(limit),
|
|
299
|
-
limit: Number(limit),
|
|
300
|
-
completed: count >= total, // if is true the import is completed
|
|
301
|
-
total,
|
|
302
|
-
};
|
|
303
|
-
};
|
|
304
|
-
|
|
305
|
-
export const reindexStories = async (
|
|
306
|
-
offset: number = 0,
|
|
307
|
-
limit: number = 50,
|
|
308
|
-
filterKey: string = "",
|
|
309
|
-
filterValue: string = ""
|
|
310
|
-
) => {
|
|
311
|
-
const defaultEnvironmentLocaleCode = await getEnvironmentDefaultLocaleCode();
|
|
312
|
-
const timeStart = new Date();
|
|
313
|
-
log(
|
|
314
|
-
`reindexStories - filterKey: ${filterKey} filterValue: ${filterValue} offset: ${offset} limit: ${limit} `
|
|
315
|
-
);
|
|
316
|
-
|
|
317
|
-
const records = await getObjects(offset, limit, filterKey, filterValue);
|
|
318
|
-
const objectsToSave = records.objects.filter(
|
|
319
|
-
(object) => !isObjectToDelete(object, defaultEnvironmentLocaleCode)
|
|
320
|
-
);
|
|
321
|
-
const objectIdsToDelete = records.objects
|
|
322
|
-
.filter((object) => isObjectToDelete(object, defaultEnvironmentLocaleCode))
|
|
323
|
-
.map((object) => object.objectID);
|
|
324
|
-
|
|
325
|
-
// Save records to Algolia
|
|
326
|
-
const index = getIndex(indexKey);
|
|
327
|
-
log(`Save ${objectsToSave.length} objects to ${index.indexName} index`);
|
|
328
|
-
const savedObjectIDs = await index.saveObjects(objectsToSave);
|
|
329
|
-
log(
|
|
330
|
-
`Delete ${objectIdsToDelete.length} objects from ${index.indexName} index`
|
|
331
|
-
);
|
|
332
|
-
const deletedObjectIDs = await index.deleteObjects(objectIdsToDelete);
|
|
333
|
-
|
|
334
|
-
const timeEnd = new Date();
|
|
335
|
-
const seconds = secondBetweenTwoDate(timeStart, timeEnd);
|
|
336
|
-
log(`Execution time: ${seconds} seconds`);
|
|
337
|
-
|
|
338
|
-
return {
|
|
339
|
-
...records,
|
|
340
|
-
savedObjectIDs: savedObjectIDs.objectIDs,
|
|
341
|
-
deletedObjectIDs: deletedObjectIDs.objectIDs,
|
|
342
|
-
};
|
|
343
|
-
};
|
|
344
|
-
|
|
345
|
-
export const removeStoryObject = async (objectId: string) => {
|
|
346
|
-
return removeIndexObject(objectId, indexKey);
|
|
347
|
-
};
|