@contrail/flexplm 1.1.51 → 1.1.53
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/lib/entity-processor/base-entity-processor.d.ts +1 -0
- package/lib/entity-processor/base-entity-processor.js +100 -14
- package/lib/index.d.ts +1 -0
- package/lib/index.js +1 -0
- package/lib/publish/base-process-publish-assortment.d.ts +18 -0
- package/lib/publish/base-process-publish-assortment.js +35 -4
- package/lib/transform/identifier-conversion-spec-mockData.d.ts +0 -0
- package/lib/transform/identifier-conversion-spec-mockData.js +444 -0
- package/lib/transform/identifier-conversion.d.ts +6 -0
- package/lib/transform/identifier-conversion.js +47 -0
- package/lib/transform/identifier-conversion.spec.d.ts +1 -0
- package/lib/transform/identifier-conversion.spec.js +339 -0
- package/lib/util/event-short-message-status.d.ts +14 -0
- package/lib/util/event-short-message-status.js +18 -0
- package/lib/util/flexplm-connect.js +6 -2
- package/package.json +1 -1
- package/src/entity-processor/base-entity-processor.ts +106 -20
- package/src/index.ts +1 -0
- package/src/publish/base-process-publish-assortment.ts +44 -9
- package/src/transform/identifier-conversion-spec-mockData.ts +496 -0
- package/src/transform/identifier-conversion.spec.ts +354 -0
- package/src/transform/identifier-conversion.ts +56 -0
- package/src/util/event-short-message-status.ts +17 -0
- package/src/util/flexplm-connect.ts +7 -3
|
@@ -17,6 +17,7 @@ export declare abstract class BaseEntityProcessor {
|
|
|
17
17
|
constructor(config: FCConfig, dc: DataConverter, mapFileUtil: MapFileUtil, baseType: string);
|
|
18
18
|
inbound(event: EntityPayloadType): Promise<any>;
|
|
19
19
|
handleIncomingUpsert(event: EntityPayloadType): Promise<any>;
|
|
20
|
+
getInboundStatusMessage(statusObject: any): string;
|
|
20
21
|
handleIncomingDelete(event: any): Promise<void>;
|
|
21
22
|
getTransformedData(event: any): Promise<any>;
|
|
22
23
|
getUpdatesForEntity(entity: any, inboundData: any): Promise<object>;
|
|
@@ -6,6 +6,7 @@ const flexplm_connect_1 = require("../util/flexplm-connect");
|
|
|
6
6
|
const map_utils_1 = require("../util/map-utils");
|
|
7
7
|
const sdk_1 = require("@contrail/sdk");
|
|
8
8
|
const type_conversion_utils_1 = require("../util/type-conversion-utils");
|
|
9
|
+
const event_short_message_status_1 = require("../util/event-short-message-status");
|
|
9
10
|
const UNSUPPORTED_TYPE = 'Unsupported eventType.';
|
|
10
11
|
class IncomingEntityResponse {
|
|
11
12
|
}
|
|
@@ -40,26 +41,76 @@ class BaseEntityProcessor {
|
|
|
40
41
|
const inboundData = await this.getTransformedData(event);
|
|
41
42
|
const incomingEntityResponse = await this.getIncomingEntity(event, inboundData);
|
|
42
43
|
if (incomingEntityResponse.earlyReturn) {
|
|
44
|
+
const statusMsg = this.getInboundStatusMessage({
|
|
45
|
+
status: event_short_message_status_1.EventShortMessageStatus.FAILURE,
|
|
46
|
+
statusMessage: incomingEntityResponse.earlyReturn.shortStatusMessage || '',
|
|
47
|
+
objectClass: event.objectClass,
|
|
48
|
+
federatedId: event.federatedId
|
|
49
|
+
});
|
|
50
|
+
console.log(statusMsg);
|
|
43
51
|
return incomingEntityResponse.earlyReturn;
|
|
44
52
|
}
|
|
45
53
|
const entity = incomingEntityResponse.entity;
|
|
46
54
|
if (!entity) {
|
|
47
55
|
const createEntityResponse = await this.getCreateEntity(inboundData);
|
|
48
56
|
if (createEntityResponse.earlyReturn) {
|
|
57
|
+
const status = (createEntityResponse.earlyReturn.shortStatusMessage === event_short_message_status_1.EventShortMessageStatus.NOT_CREATABLE)
|
|
58
|
+
? event_short_message_status_1.EventShortMessageStatus.SUCCESS
|
|
59
|
+
: event_short_message_status_1.EventShortMessageStatus.FAILURE;
|
|
60
|
+
const statusMsg = this.getInboundStatusMessage({
|
|
61
|
+
status,
|
|
62
|
+
statusMessage: createEntityResponse.earlyReturn.shortStatusMessage || '',
|
|
63
|
+
objectClass: event.objectClass,
|
|
64
|
+
federatedId: event.federatedId
|
|
65
|
+
});
|
|
66
|
+
console.log(statusMsg);
|
|
49
67
|
return createEntityResponse.earlyReturn;
|
|
50
68
|
}
|
|
51
|
-
|
|
69
|
+
const createdEntity = await this.createEntity(this.baseType, createEntityResponse.entity);
|
|
70
|
+
const statusMsg = this.getInboundStatusMessage({
|
|
71
|
+
status: event_short_message_status_1.EventShortMessageStatus.SUCCESS,
|
|
72
|
+
statusMessage: event_short_message_status_1.EventShortMessageStatus.CREATED,
|
|
73
|
+
objectClass: event.objectClass,
|
|
74
|
+
entityId: 'id',
|
|
75
|
+
federatedId: event.federatedId
|
|
76
|
+
});
|
|
77
|
+
console.log(statusMsg);
|
|
78
|
+
return createdEntity;
|
|
52
79
|
}
|
|
53
80
|
const diffs = await this.getUpdatesForEntity(entity, inboundData);
|
|
54
81
|
if (Object.getOwnPropertyNames(diffs).length == 0) {
|
|
82
|
+
const statusMsg = this.getInboundStatusMessage({
|
|
83
|
+
status: event_short_message_status_1.EventShortMessageStatus.SUCCESS,
|
|
84
|
+
statusMessage: event_short_message_status_1.EventShortMessageStatus.NO_CHANGES,
|
|
85
|
+
objectClass: event.objectClass,
|
|
86
|
+
entityId: entity.id,
|
|
87
|
+
federatedId: event.federatedId
|
|
88
|
+
});
|
|
89
|
+
console.log(statusMsg);
|
|
55
90
|
const message = 'No Changes to persist for entity: ' + entity.id;
|
|
56
|
-
console.log(message);
|
|
57
91
|
return {
|
|
58
92
|
status: 200,
|
|
59
93
|
data: { message }
|
|
60
94
|
};
|
|
61
95
|
}
|
|
62
|
-
|
|
96
|
+
const updatedEntity = await this.updateEntity(this.baseType, entity, diffs);
|
|
97
|
+
const statusMsg = this.getInboundStatusMessage({
|
|
98
|
+
status: event_short_message_status_1.EventShortMessageStatus.SUCCESS,
|
|
99
|
+
statusMessage: event_short_message_status_1.EventShortMessageStatus.UPDATED,
|
|
100
|
+
objectClass: event.objectClass,
|
|
101
|
+
entityId: entity.id,
|
|
102
|
+
federatedId: event.federatedId
|
|
103
|
+
});
|
|
104
|
+
console.log(statusMsg);
|
|
105
|
+
return updatedEntity;
|
|
106
|
+
}
|
|
107
|
+
getInboundStatusMessage(statusObject) {
|
|
108
|
+
return 'BaseEntityProcessor: inbound: status: ' + statusObject.status
|
|
109
|
+
+ ', statusMessage: ' + statusObject.statusMessage
|
|
110
|
+
+ ', entityType: ' + this.baseType
|
|
111
|
+
+ ', entityId: ' + statusObject.entityId
|
|
112
|
+
+ ', objectClass: ' + statusObject.objectClass
|
|
113
|
+
+ ', federatedId: ' + statusObject.federatedId;
|
|
63
114
|
}
|
|
64
115
|
async handleIncomingDelete(event) {
|
|
65
116
|
console.warn('delete is not configured', event);
|
|
@@ -153,13 +204,30 @@ class BaseEntityProcessor {
|
|
|
153
204
|
data: { message }
|
|
154
205
|
};
|
|
155
206
|
}
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
207
|
+
try {
|
|
208
|
+
const payload = await this.getOutgoingUpsertPayload(entityType, event);
|
|
209
|
+
const flexResponse = await new flexplm_connect_1.FlexPLMConnect(this.config).sendToFlexPLM(payload);
|
|
210
|
+
const outboundEntityUpdates = await this.getOutboundEntityUpdates(event, flexResponse);
|
|
211
|
+
if (outboundEntityUpdates) {
|
|
212
|
+
flexResponse['outboundEntityUpdates'] = outboundEntityUpdates;
|
|
213
|
+
}
|
|
214
|
+
const statusMsg = 'BaseEntityProcessor: outbound: ' + flexResponse.status
|
|
215
|
+
+ ', entityType: ' + this.baseType
|
|
216
|
+
+ ', entityId: ' + event.id
|
|
217
|
+
+ ', objectClass: ' + payload.objectClass
|
|
218
|
+
+ ', updateFromResponse: ' + ((outboundEntityUpdates && Object.keys(outboundEntityUpdates).length > 0) ? 'true' : 'false');
|
|
219
|
+
console.log(statusMsg);
|
|
220
|
+
return flexResponse;
|
|
221
|
+
}
|
|
222
|
+
catch (e) {
|
|
223
|
+
const statusMsg = 'BaseEntityProcessor: outbound: ' + e.httpResponseStatus
|
|
224
|
+
+ ', entityType: ' + this.baseType
|
|
225
|
+
+ ', entityId: ' + event.id
|
|
226
|
+
+ ', objectClass: ' + objectClass
|
|
227
|
+
+ ', updateFromResponse: ' + 'false';
|
|
228
|
+
console.log(statusMsg);
|
|
229
|
+
throw e;
|
|
161
230
|
}
|
|
162
|
-
return flexResponse;
|
|
163
231
|
}
|
|
164
232
|
async getOutboundEntityUpdates(event, flexResponse) {
|
|
165
233
|
const payload = flexResponse?.data?.payload;
|
|
@@ -196,12 +264,30 @@ class BaseEntityProcessor {
|
|
|
196
264
|
};
|
|
197
265
|
}
|
|
198
266
|
;
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
267
|
+
let objectClass = payload.objectClass;
|
|
268
|
+
try {
|
|
269
|
+
const flexResponse = await new flexplm_connect_1.FlexPLMConnect(this.config).sendToFlexPLM(payload);
|
|
270
|
+
const outboundEntityUpdates = await this.getOutboundEntityUpdates(event, flexResponse);
|
|
271
|
+
if (outboundEntityUpdates) {
|
|
272
|
+
flexResponse['outboundEntityUpdates'] = outboundEntityUpdates;
|
|
273
|
+
}
|
|
274
|
+
const statusMsg = 'BaseEntityProcessor: outbound: ' + flexResponse.status
|
|
275
|
+
+ ', entityType: ' + this.baseType
|
|
276
|
+
+ ', entityId: ' + event.id
|
|
277
|
+
+ ', objectClass: ' + objectClass
|
|
278
|
+
+ ', updateFromResponse: ' + ((outboundEntityUpdates && Object.keys(outboundEntityUpdates).length > 0) ? 'true' : 'false');
|
|
279
|
+
console.log(statusMsg);
|
|
280
|
+
return flexResponse;
|
|
281
|
+
}
|
|
282
|
+
catch (e) {
|
|
283
|
+
const statusMsg = 'BaseEntityProcessor: outbound: ' + e.httpResponseStatus
|
|
284
|
+
+ ', entityType: ' + this.baseType
|
|
285
|
+
+ ', entityId: ' + event.id
|
|
286
|
+
+ ', objectClass: ' + objectClass
|
|
287
|
+
+ ', updateFromResponse: ' + 'false';
|
|
288
|
+
console.log(statusMsg);
|
|
289
|
+
throw e;
|
|
203
290
|
}
|
|
204
|
-
return flexResponse;
|
|
205
291
|
}
|
|
206
292
|
async getEntityCurrentStateUpsertPayload(event) {
|
|
207
293
|
const id = event.id;
|
package/lib/index.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ export * from './flexplm-utils';
|
|
|
3
3
|
export * from './util/config-defaults';
|
|
4
4
|
export * from './util/data-converter';
|
|
5
5
|
export * from './util/error-response-object';
|
|
6
|
+
export * from './util/event-short-message-status';
|
|
6
7
|
export * from './util/federation';
|
|
7
8
|
export * from './util/flexplm-connect';
|
|
8
9
|
export * from './interfaces/interfaces';
|
package/lib/index.js
CHANGED
|
@@ -19,6 +19,7 @@ __exportStar(require("./flexplm-utils"), exports);
|
|
|
19
19
|
__exportStar(require("./util/config-defaults"), exports);
|
|
20
20
|
__exportStar(require("./util/data-converter"), exports);
|
|
21
21
|
__exportStar(require("./util/error-response-object"), exports);
|
|
22
|
+
__exportStar(require("./util/event-short-message-status"), exports);
|
|
22
23
|
__exportStar(require("./util/federation"), exports);
|
|
23
24
|
__exportStar(require("./util/flexplm-connect"), exports);
|
|
24
25
|
__exportStar(require("./interfaces/interfaces"), exports);
|
|
@@ -18,10 +18,16 @@ export declare class BaseProcessPublishAssortment {
|
|
|
18
18
|
process(event: any): Promise<{
|
|
19
19
|
results: {
|
|
20
20
|
message: any;
|
|
21
|
+
event: any;
|
|
21
22
|
};
|
|
22
23
|
skip_await: boolean;
|
|
23
24
|
} | {
|
|
24
25
|
results: any;
|
|
26
|
+
event: {
|
|
27
|
+
assortmentId: string;
|
|
28
|
+
assortmentPublishChangeId: string;
|
|
29
|
+
};
|
|
30
|
+
resultsCount: any;
|
|
25
31
|
skip_await?: undefined;
|
|
26
32
|
}>;
|
|
27
33
|
getPublishInfo(assortmentId: string, assortmentPublishChangeId: string, apcHistory: any, publisher: any): Promise<any>;
|
|
@@ -50,12 +56,24 @@ export declare class BaseProcessPublishAssortment {
|
|
|
50
56
|
processPublish(pcd: PublishChangeData, changeDetail: any, fullChange: any, deleteChanges: any): Promise<{
|
|
51
57
|
results: {
|
|
52
58
|
message: string;
|
|
59
|
+
event: {
|
|
60
|
+
assortmentId: string;
|
|
61
|
+
assortmentPublishChangeId: string;
|
|
62
|
+
};
|
|
53
63
|
};
|
|
54
64
|
skip_await: boolean;
|
|
65
|
+
event?: undefined;
|
|
66
|
+
resultsCount?: undefined;
|
|
55
67
|
} | {
|
|
56
68
|
results: any;
|
|
69
|
+
event: {
|
|
70
|
+
assortmentId: string;
|
|
71
|
+
assortmentPublishChangeId: string;
|
|
72
|
+
};
|
|
73
|
+
resultsCount: any;
|
|
57
74
|
skip_await?: undefined;
|
|
58
75
|
}>;
|
|
76
|
+
getResultsCount(events: any): any;
|
|
59
77
|
private sendEvents;
|
|
60
78
|
private sendToFlexPLM;
|
|
61
79
|
private saveToLocalFile;
|
|
@@ -10,9 +10,10 @@ const type_conversion_utils_1 = require("../util/type-conversion-utils");
|
|
|
10
10
|
const fsPromise = require("fs/promises");
|
|
11
11
|
const path = require("path");
|
|
12
12
|
const app_framework_1 = require("@contrail/app-framework");
|
|
13
|
+
const event_short_message_status_1 = require("../util/event-short-message-status");
|
|
13
14
|
class BaseProcessPublishAssortment {
|
|
14
15
|
constructor(_config, _dc, _mapFileUtil) {
|
|
15
|
-
this.TTL =
|
|
16
|
+
this.TTL = 30 * 24 * 60 * 60 * 1000;
|
|
16
17
|
this.cache = {
|
|
17
18
|
carriedFromSeason: {}
|
|
18
19
|
};
|
|
@@ -34,9 +35,15 @@ class BaseProcessPublishAssortment {
|
|
|
34
35
|
}
|
|
35
36
|
catch (e) {
|
|
36
37
|
const message = e.message;
|
|
38
|
+
const eventStatus = (message.includes(BaseProcessPublishAssortment.ASSORTMENT_NOT_PUBLISHABLE)) ? event_short_message_status_1.EventShortMessageStatus.NOT_PUBLISHABLE :
|
|
39
|
+
(message.startsWith(BaseProcessPublishAssortment.ASSORTMENT_NO_FED_INFO)) ? event_short_message_status_1.EventShortMessageStatus.NO_FEDERATION_INFO :
|
|
40
|
+
event_short_message_status_1.EventShortMessageStatus.FAILURE;
|
|
41
|
+
const processStatus = 'BaseProcessPublishAssortment: ' + eventStatus
|
|
42
|
+
+ ': assortmentId: ' + event.assortmentId + ': assortmentPublishChangeId: ' + event.assortmentPublishChangeId;
|
|
43
|
+
console.log(JSON.stringify(processStatus));
|
|
37
44
|
console.log(message);
|
|
38
45
|
const output = {
|
|
39
|
-
results: { message },
|
|
46
|
+
results: { message, event },
|
|
40
47
|
skip_await: true
|
|
41
48
|
};
|
|
42
49
|
return output;
|
|
@@ -502,20 +509,44 @@ class BaseProcessPublishAssortment {
|
|
|
502
509
|
}
|
|
503
510
|
async processPublish(pcd, changeDetail, fullChange, deleteChanges) {
|
|
504
511
|
console.info('processPublish-start');
|
|
512
|
+
const event = {
|
|
513
|
+
assortmentId: pcd.assortmentId,
|
|
514
|
+
assortmentPublishChangeId: pcd.assortmentPublishChangeId
|
|
515
|
+
};
|
|
505
516
|
const assortmentItemFullChangeMap = this.getFullChangeAssortmentMap(fullChange);
|
|
506
517
|
const assortmentItemDeleteMap = this.getDeleteChangesAssortmentMap(deleteChanges);
|
|
507
518
|
pcd.itemFamilyChanges = this.getItemFamilyChanges(pcd, changeDetail, assortmentItemFullChangeMap, assortmentItemDeleteMap);
|
|
508
519
|
const events = await this.getEventsForPublishChangeData(pcd);
|
|
509
520
|
if (events.length === 0) {
|
|
521
|
+
const processStatus = 'BaseProcessPublishAssortment: ' + event_short_message_status_1.EventShortMessageStatus.NO_EVENTS_TO_SEND
|
|
522
|
+
+ ': assortmentId: ' + pcd.assortmentId + ': assortmentPublishChangeId: ' + pcd.assortmentPublishChangeId;
|
|
523
|
+
console.log(processStatus);
|
|
510
524
|
const message = 'No Events to Send; returning';
|
|
511
525
|
console.log(message);
|
|
512
526
|
return {
|
|
513
|
-
results: { message },
|
|
527
|
+
results: { message, event },
|
|
514
528
|
skip_await: true
|
|
515
529
|
};
|
|
516
530
|
}
|
|
517
531
|
const results = await this.sendEvents(events);
|
|
518
|
-
|
|
532
|
+
const resultsCount = this.getResultsCount(events);
|
|
533
|
+
const processStatus = 'BaseProcessPublishAssortment: ' + event_short_message_status_1.EventShortMessageStatus.NO_EVENTS_TO_SEND
|
|
534
|
+
+ ': assortmentId: ' + pcd.assortmentId + ': assortmentPublishChangeId: ' + pcd.assortmentPublishChangeId
|
|
535
|
+
+ ': resultsCount: ' + JSON.stringify(resultsCount);
|
|
536
|
+
console.log(processStatus);
|
|
537
|
+
return { results, event, resultsCount };
|
|
538
|
+
}
|
|
539
|
+
getResultsCount(events) {
|
|
540
|
+
return events.reduce((acc, event) => {
|
|
541
|
+
const objectClass = event?.objectClass;
|
|
542
|
+
if (objectClass === 'LCSProductSeasonLink') {
|
|
543
|
+
acc.productSeasons++;
|
|
544
|
+
}
|
|
545
|
+
else if (objectClass === 'LCSSKUSeasonLink') {
|
|
546
|
+
acc.colorwaySeasons++;
|
|
547
|
+
}
|
|
548
|
+
return acc;
|
|
549
|
+
}, { productSeasons: 0, colorwaySeasons: 0 });
|
|
519
550
|
}
|
|
520
551
|
async sendEvents(events) {
|
|
521
552
|
console.info('sendEvents()');
|
|
File without changes
|