@plusscommunities/pluss-maintenance-aws 2.1.45 → 2.1.46

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.
Files changed (44) hide show
  1. package/createJob.js +201 -114
  2. package/createJobType.js +49 -49
  3. package/db/maintenance/addMaintenanceJob.js +100 -90
  4. package/db/maintenance/editMaintenanceJob.js +22 -12
  5. package/db/maintenance/getJobEmail.js +22 -22
  6. package/deleteJob.js +58 -58
  7. package/deleteJobType.js +40 -40
  8. package/editJob.js +126 -65
  9. package/editJobStatus.js +57 -57
  10. package/editJobType.js +61 -61
  11. package/editNote.js +117 -117
  12. package/feature.config.js +279 -270
  13. package/getData.js +48 -41
  14. package/getJob.js +4 -4
  15. package/getJobType.js +35 -35
  16. package/getJobTypes.js +66 -66
  17. package/getJobs.js +48 -48
  18. package/integration/IntegrationStrategy.js +52 -52
  19. package/integration/archibus/ArchibusStrategy.js +42 -28
  20. package/integration/index.js +19 -19
  21. package/jobChanged.js +88 -89
  22. package/jobTypesChanged.js +52 -39
  23. package/package.json +3 -3
  24. package/requests/assignRequest.js +81 -81
  25. package/requests/getAssignees.js +27 -27
  26. package/requests/getExternalSync.js +100 -100
  27. package/requests/getPropertyRequests.js +89 -0
  28. package/requests/getRequest.js +77 -77
  29. package/requests/helper/hasRequestPermission.js +12 -12
  30. package/requests/helper/isValidAssignee.js +10 -10
  31. package/requests/retrySync.js +90 -90
  32. package/requests/setExternalJobId.js +113 -113
  33. package/requests/updatePriority.js +33 -33
  34. package/scheduleJobImport.js +63 -63
  35. package/sendJobEmail.js +105 -104
  36. package/updateData.js +34 -34
  37. package/values.config.a.js +26 -25
  38. package/values.config.default.js +30 -28
  39. package/values.config.enquiry.js +222 -221
  40. package/values.config.feedback.js +194 -193
  41. package/values.config.food.js +29 -28
  42. package/values.config.forms.js +29 -28
  43. package/values.config.js +30 -28
  44. package/watchJobs.js +154 -154
package/jobChanged.js CHANGED
@@ -12,27 +12,27 @@ const { values } = require("./values.config");
12
12
  const marshaller = new Marshaller();
13
13
 
14
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);
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
21
  };
22
22
 
23
23
  const onStatusChanged = async (request) => {
24
- const integrationStrategy = await getStrategy(request.site);
25
- await integrationStrategy.onStatusChanged(request);
24
+ const integrationStrategy = await getStrategy(request.site);
25
+ await integrationStrategy.onStatusChanged(request);
26
26
  };
27
27
 
28
28
  const onCommentAdded = async (request) => {
29
- const integrationStrategy = await getStrategy(request.site);
30
- await integrationStrategy.onCommentAdded(request);
29
+ const integrationStrategy = await getStrategy(request.site);
30
+ await integrationStrategy.onCommentAdded(request);
31
31
  };
32
32
 
33
33
  const onNotesAdded = async (request) => {
34
- const integrationStrategy = await getStrategy(request.site);
35
- await integrationStrategy.onNotesAdded(request);
34
+ const integrationStrategy = await getStrategy(request.site);
35
+ await integrationStrategy.onNotesAdded(request);
36
36
  };
37
37
 
38
38
  /**
@@ -41,87 +41,86 @@ const onNotesAdded = async (request) => {
41
41
  * @param {Object} prevRequest The previous request data
42
42
  */
43
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
- }
44
+ if ((request.ExtCreateRetry ?? 0) > (prevRequest.ExtCreateRetry ?? 0)) {
45
+ log("checkIntegrationActions", "Retrying", true);
46
+ await pushRequestToIntegration(request);
47
+ }
48
+
49
+ if (request.status !== prevRequest.status) {
50
+ log("checkIntegrationActions", "StatusChanaged", {
51
+ new: request.status,
52
+ old: prevRequest.status,
53
+ });
54
+ await onStatusChanged(request);
55
+ }
56
+
57
+ if (request.commentCount > prevRequest.commentCount) {
58
+ log("checkIntegrationActions", "CommentCountChanged", {
59
+ new: request.commentCount,
60
+ old: prevRequest.commentCount,
61
+ });
62
+ await onCommentAdded(request);
63
+ }
64
+
65
+ if ((request.Notes ?? []).length > (prevRequest.Notes ?? []).length) {
66
+ log("checkIntegrationActions", "NotesAdded", {
67
+ new: (request.Notes ?? []).length,
68
+ old: (prevRequest.Notes ?? []).length,
69
+ });
70
+ await onNotesAdded(request);
71
+ }
75
72
  };
76
73
 
77
74
  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
- }
75
+ if (request.status !== prevRequest.status) {
76
+ log("checkAutomatedActions", "StatusChanaged", {
77
+ new: request.status,
78
+ old: prevRequest.status,
79
+ });
80
+ await triggerAutomatedAction(
81
+ request.site,
82
+ values.triggerMaintenanceStatusChanged,
83
+ {
84
+ JobNumber: request.jobNo,
85
+ status: request.status,
86
+ },
87
+ );
88
+ }
92
89
  };
93
90
 
91
+ module.exports.checkIntegrationActions = checkIntegrationActions;
92
+
94
93
  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
- });
94
+ init(config);
95
+
96
+ event.Records.forEach((record) => {
97
+ let site;
98
+ if (record.eventName === "INSERT") {
99
+ console.log("INSERT");
100
+ const data = marshaller.unmarshallItem(record.dynamodb.NewImage);
101
+ console.log("Record: ", JSON.stringify(data));
102
+
103
+ site = data.site;
104
+
105
+ pushRequestToIntegration(data);
106
+ } else if (record.eventName === "MODIFY") {
107
+ console.log("MODIFY");
108
+ const data = marshaller.unmarshallItem(record.dynamodb.NewImage);
109
+ const previousData = marshaller.unmarshallItem(record.dynamodb.OldImage);
110
+ console.log("New record: ", JSON.stringify(data));
111
+ console.log("Old record: ", JSON.stringify(previousData));
112
+
113
+ checkIntegrationActions(data, previousData);
114
+ checkAutomatedActions(data, previousData);
115
+
116
+ site = data.site;
117
+ } else if (record.eventName === "REMOVE") {
118
+ console.log("REMOVE");
119
+ const previousData = marshaller.unmarshallItem(record.dynamodb.OldImage);
120
+ console.log("Old record: ", JSON.stringify(previousData));
121
+
122
+ site = previousData.site;
123
+ }
124
+ logUpdate(site, values.updateKey);
125
+ });
127
126
  };
@@ -13,43 +13,56 @@ const notifySiteConfigs = require("@plusscommunities/pluss-core-aws/helper/notif
13
13
  const { values } = require("./values.config");
14
14
 
15
15
  module.exports.jobTypesChanged = async (event, context, callback) => {
16
- const logId = log("jobTypesChanged", "Start", { recordCount: event.Records.length, serviceKey: values.serviceKey });
17
-
18
- // Check if this variant supports siteConfigs propagation
19
- if (!values.enableSiteConfigsPropagation) {
20
- log("jobTypesChanged", "SkipPropagation", { serviceKey: values.serviceKey }, logId);
21
- return;
22
- }
23
-
24
- const promises = [];
25
-
26
- event.Records.forEach((record) => {
27
- log("jobTypesChanged", "Record", { eventName: record.eventName }, logId);
28
-
29
- if (record.eventName === "INSERT") {
30
- const data = marshaller.unmarshallItem(record.dynamodb.NewImage);
31
- log("jobTypesChanged", "Insert", { id: data.id, site: data.site }, logId);
32
-
33
- if (data.site) {
34
- promises.push(notifySiteConfigs(data.site, logId));
35
- }
36
- } else if (record.eventName === "MODIFY") {
37
- const data = marshaller.unmarshallItem(record.dynamodb.NewImage);
38
- log("jobTypesChanged", "Modify", { id: data.id, site: data.site }, logId);
39
-
40
- if (data.site) {
41
- promises.push(notifySiteConfigs(data.site, logId));
42
- }
43
- } else if (record.eventName === "REMOVE") {
44
- const previousData = marshaller.unmarshallItem(record.dynamodb.OldImage);
45
- log("jobTypesChanged", "Remove", { id: previousData.id, site: previousData.site }, logId);
46
-
47
- if (previousData.site) {
48
- promises.push(notifySiteConfigs(previousData.site, logId));
49
- }
50
- }
51
- });
52
-
53
- await Promise.all(promises);
54
- log("jobTypesChanged", "Complete", { promiseCount: promises.length }, logId);
16
+ const logId = log("jobTypesChanged", "Start", {
17
+ recordCount: event.Records.length,
18
+ serviceKey: values.serviceKey,
19
+ });
20
+
21
+ // Check if this variant supports siteConfigs propagation
22
+ if (!values.enableSiteConfigsPropagation) {
23
+ log(
24
+ "jobTypesChanged",
25
+ "SkipPropagation",
26
+ { serviceKey: values.serviceKey },
27
+ logId,
28
+ );
29
+ return;
30
+ }
31
+
32
+ const promises = [];
33
+
34
+ event.Records.forEach((record) => {
35
+ log("jobTypesChanged", "Record", { eventName: record.eventName }, logId);
36
+
37
+ if (record.eventName === "INSERT") {
38
+ const data = marshaller.unmarshallItem(record.dynamodb.NewImage);
39
+ log("jobTypesChanged", "Insert", { id: data.id, site: data.site }, logId);
40
+
41
+ if (data.site) {
42
+ promises.push(notifySiteConfigs(data.site, logId));
43
+ }
44
+ } else if (record.eventName === "MODIFY") {
45
+ const data = marshaller.unmarshallItem(record.dynamodb.NewImage);
46
+ log("jobTypesChanged", "Modify", { id: data.id, site: data.site }, logId);
47
+
48
+ if (data.site) {
49
+ promises.push(notifySiteConfigs(data.site, logId));
50
+ }
51
+ } else if (record.eventName === "REMOVE") {
52
+ const previousData = marshaller.unmarshallItem(record.dynamodb.OldImage);
53
+ log(
54
+ "jobTypesChanged",
55
+ "Remove",
56
+ { id: previousData.id, site: previousData.site },
57
+ logId,
58
+ );
59
+
60
+ if (previousData.site) {
61
+ promises.push(notifySiteConfigs(previousData.site, logId));
62
+ }
63
+ }
64
+ });
65
+
66
+ await Promise.all(promises);
67
+ log("jobTypesChanged", "Complete", { promiseCount: promises.length }, logId);
55
68
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plusscommunities/pluss-maintenance-aws",
3
- "version": "2.1.45",
3
+ "version": "2.1.46",
4
4
  "description": "Extension package to enable maintenance on Pluss Communities Platform",
5
5
  "scripts": {
6
6
  "gc": "node ../../tools/gc ./",
@@ -24,7 +24,7 @@
24
24
  "license": "ISC",
25
25
  "dependencies": {
26
26
  "@aws/dynamodb-auto-marshaller": "^0.7.1",
27
- "@plusscommunities/pluss-core-aws": "2.0.24-beta.0",
27
+ "@plusscommunities/pluss-core-aws": "2.0.27",
28
28
  "amazon-cognito-identity-js": "^2.0.19",
29
29
  "aws-sdk": "^2.1591.0",
30
30
  "axios": "^1.6.8",
@@ -61,4 +61,4 @@
61
61
  "^./testing/(.*)$": "<rootDir>/testing/$1"
62
62
  }
63
63
  }
64
- }
64
+ }
@@ -10,97 +10,97 @@ const publishNotifications = require("@plusscommunities/pluss-core-aws/db/notifi
10
10
  const { values } = require("../values.config");
11
11
 
12
12
  module.exports = async (event, data) => {
13
- const logId = log("assignRequest", "data", data);
14
- // check required data
15
- const requiredKeys = ["id", "userId"];
16
- if (!data || requiredKeys.some((prop) => !data.hasOwnProperty(prop))) {
17
- log("assignRequest", "InsufficientInput", 422, logId);
18
- return { status: 422, data: { error: "Insufficient input" } };
19
- }
13
+ const logId = log("assignRequest", "data", data);
14
+ // check required data
15
+ const requiredKeys = ["id", "userId"];
16
+ if (!data || requiredKeys.some((prop) => !data.hasOwnProperty(prop))) {
17
+ log("assignRequest", "InsufficientInput", 422, logId);
18
+ return { status: 422, data: { error: "Insufficient input" } };
19
+ }
20
20
 
21
- const request = await getRef(values.tableNameMaintenance, "id", data.id);
22
- log("assignRequest", "request", request, logId);
23
- log("assignRequest", "site", request.site, logId);
21
+ const request = await getRef(values.tableNameMaintenance, "id", data.id);
22
+ log("assignRequest", "request", request, logId);
23
+ log("assignRequest", "site", request.site, logId);
24
24
 
25
- // validate authorisation
26
- const valid = await validateMasterAuth(
27
- event,
28
- values.permissionMaintenanceTracking,
29
- request.site
30
- );
31
- log("assignRequest", "valid", valid, logId);
32
- if (!valid) {
33
- const validAssignee = await isValidAssignee(
34
- event,
35
- request.site,
36
- request.AssigneeId
37
- );
38
- log("assignRequest", "validAssignee", validAssignee, logId);
39
- if (!validAssignee) {
40
- log("assignRequest", "NotAuthorised", 403, logId);
41
- return { status: 403, data: { error: "Not authorised" } };
42
- }
43
- }
25
+ // validate authorisation
26
+ const valid = await validateMasterAuth(
27
+ event,
28
+ values.permissionMaintenanceTracking,
29
+ request.site,
30
+ );
31
+ log("assignRequest", "valid", valid, logId);
32
+ if (!valid) {
33
+ const validAssignee = await isValidAssignee(
34
+ event,
35
+ request.site,
36
+ request.AssigneeId,
37
+ );
38
+ log("assignRequest", "validAssignee", validAssignee, logId);
39
+ if (!validAssignee) {
40
+ log("assignRequest", "NotAuthorised", 403, logId);
41
+ return { status: 403, data: { error: "Not authorised" } };
42
+ }
43
+ }
44
44
 
45
- const user = await getUserPreviewFromReq(event);
46
- log("assignRequest", "user", user, logId);
47
- const assignedUser = await getUserPreview(data.userId);
48
- log("assignRequest", "assignedUser", assignedUser, logId);
45
+ const user = await getUserPreviewFromReq(event);
46
+ log("assignRequest", "user", user, logId);
47
+ const assignedUser = await getUserPreview(data.userId);
48
+ log("assignRequest", "assignedUser", assignedUser, logId);
49
49
 
50
- const changes = {
51
- history: request.history || [],
52
- };
50
+ const changes = {
51
+ history: request.history || [],
52
+ };
53
53
 
54
- // Update history
55
- changes.history.push({
56
- timestamp: moment.utc().valueOf(),
57
- EntryType: "assignment",
58
- user,
59
- assignedUser,
60
- });
54
+ // Update history
55
+ changes.history.push({
56
+ timestamp: moment.utc().valueOf(),
57
+ EntryType: "assignment",
58
+ user,
59
+ assignedUser,
60
+ });
61
61
 
62
- changes.AssigneeId = data.userId;
63
- changes.Assignee = assignedUser;
62
+ changes.AssigneeId = data.userId;
63
+ changes.Assignee = assignedUser;
64
64
 
65
- log("assignRequest", "changes", changes, logId);
65
+ log("assignRequest", "changes", changes, logId);
66
66
 
67
- const result = await editRef(
68
- values.tableNameMaintenance,
69
- "id",
70
- data.id,
71
- changes
72
- );
67
+ const result = await editRef(
68
+ values.tableNameMaintenance,
69
+ "id",
70
+ data.id,
71
+ changes,
72
+ );
73
73
 
74
- log("assignRequest", "result", result, logId);
74
+ log("assignRequest", "result", result, logId);
75
75
 
76
- // send notification to assigned user
77
- if (user.id !== assignedUser.id) {
78
- await publishNotifications(
79
- [assignedUser.id],
80
- values.notificationMaintenanceJobAssigned,
81
- result.site,
82
- result.id,
83
- result,
84
- true
85
- );
86
- }
76
+ // send notification to assigned user
77
+ if (user.id !== assignedUser.id) {
78
+ await publishNotifications(
79
+ [assignedUser.id],
80
+ values.notificationMaintenanceJobAssigned,
81
+ result.site,
82
+ result.id,
83
+ result,
84
+ true,
85
+ );
86
+ }
87
87
 
88
- // send notification to previous assignee
89
- if (request.AssigneeId && result.AssigneeId !== request.AssigneeId) {
90
- await publishNotifications(
91
- [request.AssigneeId],
92
- values.notificationMaintenanceJobUnassigned,
93
- result.site,
94
- result.id,
95
- result,
96
- true
97
- );
98
- }
88
+ // send notification to previous assignee
89
+ if (request.AssigneeId && result.AssigneeId !== request.AssigneeId) {
90
+ await publishNotifications(
91
+ [request.AssigneeId],
92
+ values.notificationMaintenanceJobUnassigned,
93
+ result.site,
94
+ result.id,
95
+ result,
96
+ true,
97
+ );
98
+ }
99
99
 
100
- return {
101
- status: 200,
102
- data: {
103
- job: result,
104
- },
105
- };
100
+ return {
101
+ status: 200,
102
+ data: {
103
+ job: result,
104
+ },
105
+ };
106
106
  };
@@ -5,36 +5,36 @@ const { values } = require("../values.config");
5
5
 
6
6
  // Define the new function to get assignees
7
7
  module.exports = async (event) => {
8
- const qParams = event.queryStringParameters || {};
9
- const logId = log("getAssignees", "Input", qParams);
8
+ const qParams = event.queryStringParameters || {};
9
+ const logId = log("getAssignees", "Input", qParams);
10
10
 
11
- const isAdmin = await validateMasterAuth(
12
- event,
13
- values.permissionMaintenanceTracking,
14
- qParams.site
15
- );
16
- const isAssignee = await validateMasterAuth(
17
- event,
18
- values.permissionMaintenanceAssignment,
19
- qParams.site
20
- );
11
+ const isAdmin = await validateMasterAuth(
12
+ event,
13
+ values.permissionMaintenanceTracking,
14
+ qParams.site,
15
+ );
16
+ const isAssignee = await validateMasterAuth(
17
+ event,
18
+ values.permissionMaintenanceAssignment,
19
+ qParams.site,
20
+ );
21
21
 
22
- const valid = isAdmin || isAssignee;
23
- log("getRequests", "valid", valid, logId);
24
- if (!valid) {
25
- return { status: 403, data: { error: "Not authorised" } };
26
- }
22
+ const valid = isAdmin || isAssignee;
23
+ log("getRequests", "valid", valid, logId);
24
+ if (!valid) {
25
+ return { status: 403, data: { error: "Not authorised" } };
26
+ }
27
27
 
28
- // get assignees
29
- const assignees = await getUsersByPermission(qParams.site, [
30
- values.permissionMaintenanceTracking,
31
- values.permissionMaintenanceAssignment,
32
- ]);
28
+ // get assignees
29
+ const assignees = await getUsersByPermission(qParams.site, [
30
+ values.permissionMaintenanceTracking,
31
+ values.permissionMaintenanceAssignment,
32
+ ]);
33
33
 
34
- log("getAssignees", "AssigneesLength", assignees.length, logId);
34
+ log("getAssignees", "AssigneesLength", assignees.length, logId);
35
35
 
36
- // compile results
37
- const results = { Users: assignees };
38
- log("getAssignees", "Done", true, logId);
39
- return { status: 200, data: results };
36
+ // compile results
37
+ const results = { Users: assignees };
38
+ log("getAssignees", "Done", true, logId);
39
+ return { status: 200, data: results };
40
40
  };