@plusscommunities/pluss-maintenance-aws-feedback 2.1.15-beta.1

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.
@@ -0,0 +1,27 @@
1
+ const getString = require("@plusscommunities/pluss-core-aws/db/strings/getString");
2
+ const { getRowId, log } = require("@plusscommunities/pluss-core-aws/helper");
3
+ const ArchibusStrategy = require("./archibus/ArchibusStrategy");
4
+ const IntegrationStrategy = require("./IntegrationStrategy");
5
+ const { values } = require("../values.config");
6
+
7
+ exports.getStrategy = async (site) => {
8
+ let importConfig;
9
+ const logId = log("getStrategy", "Site", site);
10
+ try {
11
+ importConfig = await getString(
12
+ getRowId(site, `${values.serviceKey}integration`),
13
+ "plussSpace"
14
+ );
15
+
16
+ switch (importConfig.Strategy) {
17
+ case "Archibus":
18
+ return new ArchibusStrategy(importConfig);
19
+ default:
20
+ return new IntegrationStrategy();
21
+ }
22
+ } catch (e) {
23
+ log("getStrategy", "Error", e, logId);
24
+ }
25
+
26
+ return new IntegrationStrategy();
27
+ };
package/jobChanged.js ADDED
@@ -0,0 +1,127 @@
1
+ const moment = require("moment");
2
+ const _ = require("lodash");
3
+ const { Marshaller } = require("@aws/dynamodb-auto-marshaller");
4
+ const config = require("./config.json");
5
+ const { init } = require("@plusscommunities/pluss-core-aws/config");
6
+ const logUpdate = require("@plusscommunities/pluss-core-aws/db/strings/logUpdate");
7
+ const { getStrategy } = require("./integration");
8
+ const { log } = require("@plusscommunities/pluss-core-aws/helper");
9
+ const triggerAutomatedAction = require("@plusscommunities/pluss-core-aws/helper/triggerAutomatedAction");
10
+ const { values } = require("./values.config");
11
+
12
+ const marshaller = new Marshaller();
13
+
14
+ const pushRequestToIntegration = async (request) => {
15
+ const integrationStrategy = await getStrategy(request.site);
16
+ // const mockRes = {
17
+ // data: { wrId: moment().valueOf() },
18
+ // };
19
+ // await integrationStrategy.createRequest(request, mockRes);
20
+ await integrationStrategy.createRequest(request);
21
+ };
22
+
23
+ const onStatusChanged = async (request) => {
24
+ const integrationStrategy = await getStrategy(request.site);
25
+ await integrationStrategy.onStatusChanged(request);
26
+ };
27
+
28
+ const onCommentAdded = async (request) => {
29
+ const integrationStrategy = await getStrategy(request.site);
30
+ await integrationStrategy.onCommentAdded(request);
31
+ };
32
+
33
+ const onNotesAdded = async (request) => {
34
+ const integrationStrategy = await getStrategy(request.site);
35
+ await integrationStrategy.onNotesAdded(request);
36
+ };
37
+
38
+ /**
39
+ * Checks for any necessary integration actions based on the change in the request data
40
+ * @param {Object} request The new request data
41
+ * @param {Object} prevRequest The previous request data
42
+ */
43
+ const checkIntegrationActions = async (request, prevRequest) => {
44
+ if (
45
+ request.ExtCreateRetry &&
46
+ request.ExtCreateRetry !== prevRequest.ExtCreateRetry
47
+ ) {
48
+ log("checkIntegrationActions", "Retrying", true);
49
+ await pushRequestToIntegration(request);
50
+ }
51
+
52
+ if (request.status !== prevRequest.status) {
53
+ log("checkIntegrationActions", "StatusChanaged", {
54
+ new: request.status,
55
+ old: prevRequest.status,
56
+ });
57
+ await onStatusChanged(request);
58
+ }
59
+
60
+ if (request.commentCount > prevRequest.commentCount) {
61
+ log("checkIntegrationActions", "CommentCountChanged", {
62
+ new: request.commentCount,
63
+ old: prevRequest.commentCount,
64
+ });
65
+ await onCommentAdded(request);
66
+ }
67
+
68
+ if ((request.Notes ?? []).length > (prevRequest.Notes ?? []).length) {
69
+ log("checkIntegrationActions", "NotesAdded", {
70
+ new: (request.Notes ?? []).length,
71
+ old: (prevRequest.Notes ?? []).length,
72
+ });
73
+ await onNotesAdded(request);
74
+ }
75
+ };
76
+
77
+ const checkAutomatedActions = async (request, prevRequest) => {
78
+ if (request.status !== prevRequest.status) {
79
+ log("checkAutomatedActions", "StatusChanaged", {
80
+ new: request.status,
81
+ old: prevRequest.status,
82
+ });
83
+ await triggerAutomatedAction(
84
+ request.site,
85
+ values.triggerMaintenanceStatusChanged,
86
+ {
87
+ JobNumber: request.jobNo,
88
+ status: request.status,
89
+ }
90
+ );
91
+ }
92
+ };
93
+
94
+ module.exports.jobChanged = (event, context, callback) => {
95
+ init(config);
96
+
97
+ event.Records.forEach((record) => {
98
+ let site;
99
+ if (record.eventName == "INSERT") {
100
+ console.log("INSERT");
101
+ const data = marshaller.unmarshallItem(record.dynamodb.NewImage);
102
+ console.log("Record: ", JSON.stringify(data));
103
+
104
+ site = data.site;
105
+
106
+ pushRequestToIntegration(data);
107
+ } else if (record.eventName == "MODIFY") {
108
+ console.log("MODIFY");
109
+ const data = marshaller.unmarshallItem(record.dynamodb.NewImage);
110
+ const previousData = marshaller.unmarshallItem(record.dynamodb.OldImage);
111
+ console.log("New record: ", JSON.stringify(data));
112
+ console.log("Old record: ", JSON.stringify(previousData));
113
+
114
+ checkIntegrationActions(data, previousData);
115
+ checkAutomatedActions(data, previousData);
116
+
117
+ site = data.site;
118
+ } else if (record.eventName == "REMOVE") {
119
+ console.log("REMOVE");
120
+ const previousData = marshaller.unmarshallItem(record.dynamodb.OldImage);
121
+ console.log("Old record: ", JSON.stringify(previousData));
122
+
123
+ site = previousData.site;
124
+ }
125
+ logUpdate(site, values.updateKey);
126
+ });
127
+ };