@plusscommunities/pluss-maintenance-aws 2.2.1-beta.0 → 2.2.2-beta.0

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/getData.js CHANGED
@@ -4,6 +4,7 @@ const { log } = require("@plusscommunities/pluss-core-aws/helper");
4
4
  const generateJsonResponse = require("@plusscommunities/pluss-core-aws/helper/generateJsonResponse");
5
5
  const getAssignees = require("./requests/getAssignees");
6
6
  const getRequests = require("./requests/getRequests");
7
+ const getRequest = require("./requests/getRequest");
7
8
 
8
9
  module.exports.getData = async (event, context, callback) => {
9
10
  init(config);
@@ -20,6 +21,13 @@ module.exports.getData = async (event, context, callback) => {
20
21
  log(action, "ResponseLength", response.data.Items.length, logId);
21
22
  }
22
23
  break;
24
+
25
+ case "request":
26
+ response = await getRequest(event);
27
+ if (response.status === 200) {
28
+ log(action, "ResponseLength", response.data, logId);
29
+ }
30
+ break;
23
31
  case "assignees":
24
32
  response = await getAssignees(event);
25
33
  if (response.status === 200) {
package/getJob.js CHANGED
@@ -2,82 +2,13 @@ const config = require("./config.json");
2
2
  const { init } = require("@plusscommunities/pluss-core-aws/config");
3
3
  const { getBody } = require("@plusscommunities/pluss-core-aws/helper");
4
4
  const generateJsonResponse = require("@plusscommunities/pluss-core-aws/helper/generateJsonResponse");
5
- const getRef = require("@plusscommunities/pluss-core-aws/db/common/getRef");
6
- const indexQuery = require("@plusscommunities/pluss-core-aws/db/common/indexQuery");
7
- const validateMasterAuth = require("@plusscommunities/pluss-core-aws/helper/auth/validateMasterAuth");
8
- const getSessionUser = require("@plusscommunities/pluss-core-aws/helper/auth/getSessionUser");
9
- const isValidAssignee = require("./requests/helper/isValidAssignee");
10
- const { values } = require("./values.config");
5
+ const getRequest = require("./requests/getRequest");
11
6
 
12
7
  module.exports.getJob = async (event, context, callback) => {
13
8
  init(config);
14
9
  const data = getBody(event);
15
10
 
16
- if (!data.site || (!data.id && !data.jobId)) {
17
- return callback(
18
- null,
19
- generateJsonResponse(422, {
20
- error: { message: "User Types fetch -- no site or type id detected." },
21
- })
22
- );
23
- }
11
+ const result = await getRequest(event, data);
24
12
 
25
- try {
26
- let result = null;
27
- if (data.jobId) {
28
- const query = {
29
- IndexName: "MaintenanceSiteJobIdIndex",
30
- KeyConditionExpression: "site = :site and jobId = :jobId",
31
- ExpressionAttributeValues: {
32
- ":site": data.site,
33
- ":jobId": data.jobId,
34
- },
35
- };
36
- const { Items } = await indexQuery(values.tableNameMaintenance, query);
37
- result = Items[0];
38
- }
39
- if (!result)
40
- result = await getRef(
41
- values.tableNameMaintenance,
42
- "id",
43
- data.id || data.jobId
44
- );
45
-
46
- try {
47
- const authorised = await validateMasterAuth(
48
- event,
49
- values.permissionMaintenanceTracking,
50
- result.site
51
- );
52
- const assignAuthorised = await isValidAssignee(
53
- event,
54
- result.site,
55
- result.AssigneeId
56
- );
57
- if (!authorised && !assignAuthorised) {
58
- // Check if the job belongs to the user
59
- const userId = await getSessionUser(event.headers.authkey);
60
- if (userId !== result.userID) {
61
- console.error("Authorization not valid");
62
- return callback(
63
- null,
64
- generateJsonResponse(403, {
65
- error: { message: "not authorised." },
66
- })
67
- );
68
- }
69
- }
70
- return callback(null, generateJsonResponse(200, result));
71
- } catch (error) {
72
- callback(null, generateJsonResponse(422, { fail: true }));
73
- }
74
- } catch (error1) {
75
- return callback(
76
- null,
77
- generateJsonResponse(200, {
78
- userFetchFail: true,
79
- message: "Fail on user query. Please try again.",
80
- })
81
- );
82
- }
13
+ return callback(null, generateJsonResponse(result.status, result.data));
83
14
  };
@@ -9,7 +9,6 @@ const updateRef = require("@plusscommunities/pluss-core-aws/db/common/updateRef"
9
9
  const indexQuery = require("@plusscommunities/pluss-core-aws/db/common/indexQuery");
10
10
  const publishNotifications = require("@plusscommunities/pluss-core-aws/db/notifications/publishNotifications");
11
11
  const getRef = require("@plusscommunities/pluss-core-aws/db/common/getRef");
12
- const { values } = require("../../values.config");
13
12
 
14
13
  class ArchibusStrategy extends IntegrationStrategy {
15
14
  constructor(config) {
@@ -70,7 +69,7 @@ class ArchibusStrategy extends IntegrationStrategy {
70
69
  Host: this.host,
71
70
  },
72
71
  data: {
73
- prob_type: "1.ON-SITE",
72
+ prob_type: "1.ON-SITE|1. MAINTENANCE",
74
73
  requestor: "PLUSSDEV",
75
74
  description: `${request.title}${
76
75
  _.isEmpty(request.description) ? "" : `\n\n${request.description}`
@@ -99,7 +98,7 @@ class ArchibusStrategy extends IntegrationStrategy {
99
98
  });
100
99
 
101
100
  // Save the Archibus ID as the job number
102
- await editRef(values.tableNameMaintenance, "id", request.id, {
101
+ await editRef("maintenance", "id", request.id, {
103
102
  jobNo: response.data.wrId,
104
103
  jobId: response.data.wrId + "",
105
104
  });
@@ -125,7 +124,7 @@ class ArchibusStrategy extends IntegrationStrategy {
125
124
  log("Archibus:CreateRequest", "Error", e, logId);
126
125
 
127
126
  // trigger another attempt
128
- // editRef(values.tableNameMaintenance, "id", request.id, {
127
+ // editRef("maintenance", "id", request.id, {
129
128
  // ExtCreateRetry: moment().valueOf(),
130
129
  // });
131
130
  }
@@ -190,24 +189,15 @@ class ArchibusStrategy extends IntegrationStrategy {
190
189
  log("Archibus:RefreshFromSource", "UpdatedStatus", statusToUse, logId);
191
190
 
192
191
  if (statusToUse) {
193
- let plussRequest = await getRef(
194
- values.tableNameMaintenance,
195
- "id",
196
- requestId
197
- );
192
+ let plussRequest = await getRef("maintenance", "id", requestId);
198
193
  // check how the new status map to what is saved in Pluss
199
194
 
200
195
  if (statusToUse.Status !== plussRequest.status) {
201
196
  // save updated status
202
197
 
203
- plussRequest = await editRef(
204
- values.tableNameMaintenance,
205
- "id",
206
- requestId,
207
- {
208
- status: statusToUse.Status,
209
- }
210
- );
198
+ plussRequest = await editRef("maintenance", "id", requestId, {
199
+ status: statusToUse.Status,
200
+ });
211
201
  log(
212
202
  "Archibus:RefreshFromSource",
213
203
  "SavedStatus",
@@ -400,7 +390,7 @@ class ArchibusStrategy extends IntegrationStrategy {
400
390
  IndexName: "CommentsEntityIdIndex",
401
391
  KeyConditionExpression: "EntityId = :groupId",
402
392
  ExpressionAttributeValues: {
403
- ":groupId": getRowId(request.id, values.serviceKey),
393
+ ":groupId": getRowId(request.id, "maintenance"),
404
394
  },
405
395
  };
406
396
 
package/jobChanged.js CHANGED
@@ -4,6 +4,7 @@ const { init } = require("@plusscommunities/pluss-core-aws/config");
4
4
  const logUpdate = require("@plusscommunities/pluss-core-aws/db/strings/logUpdate");
5
5
  const { getStrategy } = require("./integration");
6
6
  const { log } = require("@plusscommunities/pluss-core-aws/helper");
7
+ const { values } = require("./values.config");
7
8
 
8
9
  const marshaller = new Marshaller();
9
10
 
@@ -67,6 +68,6 @@ module.exports.jobChanged = (event, context, callback) => {
67
68
 
68
69
  site = previousData.site;
69
70
  }
70
- logUpdate(site, "jobs");
71
+ logUpdate(site, values.updateKey);
71
72
  });
72
73
  };
package/package-lock.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plusscommunities/pluss-maintenance-aws",
3
- "version": "2.2.1-beta.0",
3
+ "version": "2.2.2-beta.0",
4
4
  "lockfileVersion": 1,
5
5
  "requires": true,
6
6
  "dependencies": {
@@ -1468,9 +1468,9 @@
1468
1468
  }
1469
1469
  },
1470
1470
  "@plusscommunities/pluss-core-aws": {
1471
- "version": "2.0.8",
1472
- "resolved": "https://registry.npmjs.org/@plusscommunities/pluss-core-aws/-/pluss-core-aws-2.0.8.tgz",
1473
- "integrity": "sha512-cwSNYnpfxCJXOqmh9rAXjF+fqfBF5r9E/t1zezNxnRD1k456PtbRmDhiUGuQ7w7ysOFuZqP1KNYWLBJ8qsQy6Q==",
1471
+ "version": "2.1.4-beta.0",
1472
+ "resolved": "https://registry.npmjs.org/@plusscommunities/pluss-core-aws/-/pluss-core-aws-2.1.4-beta.0.tgz",
1473
+ "integrity": "sha512-rSxTGfX0PqJU+dOTwMcS/w17dwdPmuCd37JpfwJXCJUrQP56jp/4Ly13x7IlmbC7wtBdLBIjpqPBy2d1rpNtlQ==",
1474
1474
  "requires": {
1475
1475
  "@aws/dynamodb-auto-marshaller": "^0.7.1",
1476
1476
  "amazon-cognito-identity-js": "^2.0.19",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plusscommunities/pluss-maintenance-aws",
3
- "version": "2.2.1-beta.0",
3
+ "version": "2.2.2-beta.0",
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.8",
27
+ "@plusscommunities/pluss-core-aws": "2.1.4-beta.0",
28
28
  "amazon-cognito-identity-js": "^2.0.19",
29
29
  "aws-sdk": "^2.1591.0",
30
30
  "axios": "^1.6.8",
@@ -0,0 +1,89 @@
1
+ const { log, getRowId } = require("@plusscommunities/pluss-core-aws/helper");
2
+ const getRef = require("@plusscommunities/pluss-core-aws/db/common/getRef");
3
+ const indexQuery = require("@plusscommunities/pluss-core-aws/db/common/indexQuery");
4
+ const validateMasterAuth = require("@plusscommunities/pluss-core-aws/helper/auth/validateMasterAuth");
5
+ const isValidAssignee = require("./helper/isValidAssignee");
6
+ const getSessionUserFromReqAuthKey = require("@plusscommunities/pluss-core-aws/helper/auth/getSessionUserFromReqAuthKey");
7
+ const { values } = require("../values.config");
8
+
9
+ module.exports = async (event, params) => {
10
+ const data = params || event.queryStringParameters;
11
+ const logId = log("getRequest", "Params", data);
12
+ if (!data.id && (!data.site || !data.jobId)) {
13
+ return {
14
+ status: 422,
15
+ data: {
16
+ error: "Insufficient input",
17
+ },
18
+ };
19
+ }
20
+
21
+ try {
22
+ let result = null;
23
+ if (data.jobId) {
24
+ const query = {
25
+ IndexName: "MaintenanceSiteJobIdIndex",
26
+ KeyConditionExpression: "site = :site and jobId = :jobId",
27
+ ExpressionAttributeValues: {
28
+ ":site": data.site,
29
+ ":jobId": data.jobId,
30
+ },
31
+ };
32
+ const { Items } = await indexQuery(values.tableNameMaintenance, query);
33
+ result = Items[0];
34
+ }
35
+ if (!result) {
36
+ result = await getRef(
37
+ values.tableNameMaintenance,
38
+ "id",
39
+ data.id || data.jobId
40
+ );
41
+ }
42
+
43
+ const authorised = await validateMasterAuth(
44
+ event,
45
+ values.permissionMaintenanceTracking,
46
+ result.site
47
+ );
48
+ const assignAuthorised = await isValidAssignee(
49
+ event,
50
+ result.site,
51
+ result.AssigneeId
52
+ );
53
+ if (!authorised && !assignAuthorised) {
54
+ // Check if the job belongs to the user
55
+ const userId = await getSessionUserFromReqAuthKey(event);
56
+ if (userId !== result.userID) {
57
+ return {
58
+ status: 403,
59
+ data: {
60
+ error: "Not authorised",
61
+ },
62
+ };
63
+ }
64
+ }
65
+ if (data.includeComments) {
66
+ const commentsQuery = {
67
+ IndexName: "CommentsEntityIdIndex",
68
+ KeyConditionExpression: "EntityId = :groupId",
69
+ ExpressionAttributeValues: {
70
+ ":groupId": getRowId(result.id, values.entityKey),
71
+ },
72
+ };
73
+ const commentsData = await indexQuery("comments", commentsQuery);
74
+ result.Comments = commentsData.Items;
75
+ }
76
+ return {
77
+ status: 200,
78
+ data: result,
79
+ };
80
+ } catch (error) {
81
+ log("getRequest", "Error", error.toString(), logId);
82
+ }
83
+ return {
84
+ status: 500,
85
+ data: {
86
+ error: "Internal error",
87
+ },
88
+ };
89
+ };
@@ -44,7 +44,8 @@ const processBatch = async (strategy, startTime) => {
44
44
  const promises = [];
45
45
 
46
46
  Items.forEach((item) => {
47
- promises.push(processSingle(strategy, item));
47
+ log("processBatch", "ProcessSingle", JSON.stringify(item), logId);
48
+ promises.push(processSingle(strategy, JSON.parse(JSON.stringify(item))));
48
49
  });
49
50
 
50
51
  await Promise.all(promises);
@@ -1,6 +1,7 @@
1
1
  const values = {
2
2
  entityKey: "maintenancerequestA",
3
3
  serviceKey: "maintenanceA",
4
+ updateKey: "jobsA",
4
5
  tableKeyJobTypes: "jobtypesA",
5
6
  tableKeyMaintenance: "maintenanceA",
6
7
  tableKeySupportTickets: "supportticketsA",
@@ -0,0 +1,26 @@
1
+ const values = {
2
+ entityKey: "maintenancerequestB",
3
+ serviceKey: "maintenanceB",
4
+ updateKey: "jobsB",
5
+ tableKeyJobTypes: "jobtypesB",
6
+ tableKeyMaintenance: "maintenanceB",
7
+ tableKeySupportTickets: "supportticketsB",
8
+ tableNameJobTypes: "jobTypesB",
9
+ tableNameMaintenance: "maintenanceB",
10
+ tableNameSupportTickets: "supportticketsB",
11
+ permissionMaintenanceTracking: "maintenanceTrackingB",
12
+ permissionMaintenanceAssignment: "maintenanceAssignmentB",
13
+ permissionMaintenanceTypes: "maintenanceTypesB",
14
+ routeEntityPath: "/requestsHubB/jobDetails/:id",
15
+ screenMaintenanceDetail: "requestDetailB",
16
+ notificationMaintenanceJobAssigned: "MaintenanceJobAssignedB",
17
+ notificationMaintenanceJobUnassigned: "MaintenanceJobUnassignedB",
18
+ activityDeleteMaintenanceJob: "DeleteMaintenanceJobB",
19
+ activityEditMaintenanceJob: "EditMaintenanceJobB",
20
+ activityMaintenanceJobStatusChanged: "MaintenanceJobStatusChangedB",
21
+ activityAddMaintenanceNote: "AddMaintenanceNoteB",
22
+ activityDeleteMaintenanceNote: "DeleteMaintenanceNoteB",
23
+ activityEditMaintenanceNote: "EditMaintenanceNoteB",
24
+ textJobEmailTitle: "Service Request",
25
+ };
26
+ exports.values = values;
@@ -0,0 +1,26 @@
1
+ const values = {
2
+ entityKey: "maintenancerequestC",
3
+ serviceKey: "maintenanceC",
4
+ updateKey: "jobsC",
5
+ tableKeyJobTypes: "jobtypesC",
6
+ tableKeyMaintenance: "maintenanceC",
7
+ tableKeySupportTickets: "supportticketsC",
8
+ tableNameJobTypes: "jobTypesC",
9
+ tableNameMaintenance: "maintenanceC",
10
+ tableNameSupportTickets: "supportticketsC",
11
+ permissionMaintenanceTracking: "maintenanceTrackingC",
12
+ permissionMaintenanceAssignment: "maintenanceAssignmentC",
13
+ permissionMaintenanceTypes: "maintenanceTypesC",
14
+ routeEntityPath: "/requestsHubC/jobDetails/:id",
15
+ screenMaintenanceDetail: "requestDetailC",
16
+ notificationMaintenanceJobAssigned: "MaintenanceJobAssignedC",
17
+ notificationMaintenanceJobUnassigned: "MaintenanceJobUnassignedC",
18
+ activityDeleteMaintenanceJob: "DeleteMaintenanceJobC",
19
+ activityEditMaintenanceJob: "EditMaintenanceJobC",
20
+ activityMaintenanceJobStatusChanged: "MaintenanceJobStatusChangedC",
21
+ activityAddMaintenanceNote: "AddMaintenanceNoteC",
22
+ activityDeleteMaintenanceNote: "DeleteMaintenanceNoteC",
23
+ activityEditMaintenanceNote: "EditMaintenanceNoteC",
24
+ textJobEmailTitle: "Service Request",
25
+ };
26
+ exports.values = values;
@@ -0,0 +1,26 @@
1
+ const values = {
2
+ entityKey: "maintenancerequestD",
3
+ serviceKey: "maintenanceD",
4
+ updateKey: "jobsD",
5
+ tableKeyJobTypes: "jobtypesD",
6
+ tableKeyMaintenance: "maintenanceD",
7
+ tableKeySupportTickets: "supportticketsD",
8
+ tableNameJobTypes: "jobTypesD",
9
+ tableNameMaintenance: "maintenanceD",
10
+ tableNameSupportTickets: "supportticketsD",
11
+ permissionMaintenanceTracking: "maintenanceTrackingD",
12
+ permissionMaintenanceAssignment: "maintenanceAssignmentD",
13
+ permissionMaintenanceTypes: "maintenanceTypesD",
14
+ routeEntityPath: "/requestsHubD/jobDetails/:id",
15
+ screenMaintenanceDetail: "requestDetailD",
16
+ notificationMaintenanceJobAssigned: "MaintenanceJobAssignedD",
17
+ notificationMaintenanceJobUnassigned: "MaintenanceJobUnassignedD",
18
+ activityDeleteMaintenanceJob: "DeleteMaintenanceJobD",
19
+ activityEditMaintenanceJob: "EditMaintenanceJobD",
20
+ activityMaintenanceJobStatusChanged: "MaintenanceJobStatusChangedD",
21
+ activityAddMaintenanceNote: "AddMaintenanceNoteD",
22
+ activityDeleteMaintenanceNote: "DeleteMaintenanceNoteD",
23
+ activityEditMaintenanceNote: "EditMaintenanceNoteD",
24
+ textJobEmailTitle: "Service Request",
25
+ };
26
+ exports.values = values;
@@ -1,6 +1,7 @@
1
1
  const values = {
2
2
  entityKey: "maintenancerequest",
3
3
  serviceKey: "maintenance",
4
+ updateKey: "jobs",
4
5
  tableKeyJobTypes: "jobtypes",
5
6
  tableKeyMaintenance: "maintenance",
6
7
  tableKeySupportTickets: "supporttickets",
package/values.config.js CHANGED
@@ -1,6 +1,7 @@
1
1
  const values = {
2
2
  entityKey: "maintenancerequest",
3
3
  serviceKey: "maintenance",
4
+ updateKey: "jobs",
4
5
  tableKeyJobTypes: "jobtypes",
5
6
  tableKeyMaintenance: "maintenance",
6
7
  tableKeySupportTickets: "supporttickets",