@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.
@@ -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
- return this.createEntity(this.baseType, createEntityResponse.entity);
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
- return this.updateEntity(this.baseType, entity, diffs);
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
- const payload = await this.getOutgoingUpsertPayload(entityType, event);
157
- const flexResponse = await new flexplm_connect_1.FlexPLMConnect(this.config).sendToFlexPLM(payload);
158
- const outboundEntityUpdates = await this.getOutboundEntityUpdates(event, flexResponse);
159
- if (outboundEntityUpdates) {
160
- flexResponse['outboundEntityUpdates'] = outboundEntityUpdates;
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
- const flexResponse = await new flexplm_connect_1.FlexPLMConnect(this.config).sendToFlexPLM(payload);
200
- const outboundEntityUpdates = await this.getOutboundEntityUpdates(event, flexResponse);
201
- if (outboundEntityUpdates) {
202
- flexResponse['outboundEntityUpdates'] = outboundEntityUpdates;
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 = 7 * 24 * 60 * 60 * 1000;
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
- return { results };
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()');