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