@getjones/test-infra 3.0.1 → 3.0.2

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 (213) hide show
  1. package/package.json +30 -30
  2. package/src/common/commonFlows/auth/auth.js +40 -40
  3. package/src/common/commonFlows/index.js +4 -4
  4. package/src/common/commonFlows/records/records.js +123 -102
  5. package/src/common/consts/activationStatuses.js +6 -6
  6. package/src/common/consts/constantsForRecordsSortingAndFilters.js +40 -0
  7. package/src/common/consts/dashboardCharts.js +18 -18
  8. package/src/common/consts/projectSettings.js +6 -6
  9. package/src/common/consts/recordTypes.js +5 -5
  10. package/src/common/consts/s3FileTypes.js +12 -12
  11. package/src/common/consts/userTypes.js +8 -8
  12. package/src/common/errorCodes.js +3 -3
  13. package/src/common/httpResponseStatusCodes.json +11 -11
  14. package/src/common/requests/apiKeyAuth/requests.js +44 -44
  15. package/src/common/requests/cookieAuth/requests.js +40 -40
  16. package/src/common/requests/internalAuth/requests.js +48 -48
  17. package/src/common/requests/requestHandlers.js +78 -78
  18. package/src/common/utils/complianceUtil.js +83 -83
  19. package/src/common/utils/configsUtil.js +22 -22
  20. package/src/common/utils/dataTypeUtils.js +41 -41
  21. package/src/common/utils/numberUtils.js +22 -22
  22. package/src/common/utils/objectUtils.js +7 -7
  23. package/src/common/utils/timeUtils.js +177 -177
  24. package/src/common/validations/errorValidation.js +16 -16
  25. package/src/common/validations/typeValidations.js +36 -36
  26. package/src/defaults/configs/auditConfigs.js +91 -91
  27. package/src/defaults/configs/coverage.js +227 -227
  28. package/src/defaults/configs/polices.js +64 -64
  29. package/src/defaults/configs/requirement.js +32 -32
  30. package/src/defaults/index.js +6 -6
  31. package/src/env.js +57 -57
  32. package/src/factory/globalRecord/globalRecord.js +70 -70
  33. package/src/factory/index.js +8 -8
  34. package/src/factory/records/records.js +169 -183
  35. package/src/factory/users/users.js +77 -77
  36. package/src/index.js +91 -91
  37. package/src/resources/virusFile.pdf +0 -0
  38. package/src/saas/internal-api/accounts/api/core/accounts.core.api.js +35 -35
  39. package/src/saas/internal-api/accounts/api/core/accounts.core.service.js +93 -93
  40. package/src/saas/internal-api/accounts/api/emailCustomization/accounts.email.customizations.api.js +29 -29
  41. package/src/saas/internal-api/accounts/api/emailCustomization/accounts.email.customizations.service.js +61 -61
  42. package/src/saas/internal-api/accounts/api/openapi/accounts.openapi.api.js +48 -48
  43. package/src/saas/internal-api/accounts/api/openapi/accounts.openapi.service.js +74 -74
  44. package/src/saas/internal-api/accounts/api/settings/settings.api.js +21 -21
  45. package/src/saas/internal-api/accounts/api/settings/settings.service.js +41 -41
  46. package/src/saas/internal-api/accounts/consts/consts.js +6 -6
  47. package/src/saas/internal-api/accounts/index.js +22 -22
  48. package/src/saas/internal-api/accounts/models/core/create.account.model.js +16 -16
  49. package/src/saas/internal-api/accounts/models/settings/update.settings.model.js +38 -38
  50. package/src/saas/internal-api/accounts/utils/utils.js +58 -58
  51. package/src/saas/internal-api/agreement/api/agreement.api.js +35 -35
  52. package/src/saas/internal-api/agreement/api/agreement.service.js +81 -81
  53. package/src/saas/internal-api/agreement/consts/consts.js +8 -8
  54. package/src/saas/internal-api/agreement/index.js +11 -11
  55. package/src/saas/internal-api/agreement/models/create.agreement.model.js +12 -12
  56. package/src/saas/internal-api/auditCustomerRules/api/customer.rules.api.js +43 -43
  57. package/src/saas/internal-api/auditCustomerRules/api/customer.rules.service.js +105 -105
  58. package/src/saas/internal-api/auditCustomerRules/consts/customer.rule.js +11 -11
  59. package/src/saas/internal-api/auditCustomerRules/index.js +6 -6
  60. package/src/saas/internal-api/auditCustomerRules/models/customer.rule.model.js +46 -46
  61. package/src/saas/internal-api/auditCustomerRules/utils/customer.rule.util.js +19 -19
  62. package/src/saas/internal-api/auditNotes/api/audit.notes.api.js +40 -40
  63. package/src/saas/internal-api/auditNotes/api/audit.notes.service.js +115 -115
  64. package/src/saas/internal-api/auditNotes/index.js +4 -4
  65. package/src/saas/internal-api/auditNotes/models/audit.note.model.js +30 -30
  66. package/src/saas/internal-api/auth/api/auth.api.js +27 -27
  67. package/src/saas/internal-api/auth/api/auth.service.js +90 -90
  68. package/src/saas/internal-api/auth/index.js +3 -3
  69. package/src/saas/internal-api/coi/api/coi.api.js +40 -40
  70. package/src/saas/internal-api/coi/api/coi.service.js +26 -26
  71. package/src/saas/internal-api/coi/consts/hashes.js +4 -0
  72. package/src/saas/internal-api/coi/consts/uploaderTypes.js +5 -5
  73. package/src/saas/internal-api/coi/index.js +14 -13
  74. package/src/saas/internal-api/coi/models/submit.coi.model.js +9 -9
  75. package/src/saas/internal-api/coi/utils/utils.js +48 -48
  76. package/src/saas/internal-api/compliance/api/audit/audit.api.js +100 -100
  77. package/src/saas/internal-api/compliance/api/audit/audit.service.js +242 -230
  78. package/src/saas/internal-api/compliance/api/convert/convert.api.js +17 -17
  79. package/src/saas/internal-api/compliance/api/convert/convert.service.js +11 -11
  80. package/src/saas/internal-api/compliance/api/coverage/coverage.api.js +33 -33
  81. package/src/saas/internal-api/compliance/api/coverage/coverage.service.js +48 -48
  82. package/src/saas/internal-api/compliance/api/overrideGap/override.gap.api.js +33 -33
  83. package/src/saas/internal-api/compliance/api/overrideGap/override.gap.service.js +141 -141
  84. package/src/saas/internal-api/compliance/consts/audit.js +103 -103
  85. package/src/saas/internal-api/compliance/index.js +33 -33
  86. package/src/saas/internal-api/compliance/models/audit/audit.model.js +94 -94
  87. package/src/saas/internal-api/compliance/models/waive/waive.model.js +49 -49
  88. package/src/saas/internal-api/compliance/utils/auditUtil.js +222 -222
  89. package/src/saas/internal-api/compliance/utils/coverageUtil.js +40 -40
  90. package/src/saas/internal-api/contractors/api/contractors.api.js +185 -179
  91. package/src/saas/internal-api/contractors/api/contractors.service.js +259 -247
  92. package/src/saas/internal-api/contractors/consts/consts.js +6 -6
  93. package/src/saas/internal-api/contractors/index.js +8 -8
  94. package/src/saas/internal-api/contractors/models/assign.requirement.model.js +10 -10
  95. package/src/saas/internal-api/contractors/models/edit.contractor.model.js +62 -60
  96. package/src/saas/internal-api/contractors/models/link.request.model.js +10 -0
  97. package/src/saas/internal-api/contractors/models/verification.contractor.model.js +27 -27
  98. package/src/saas/internal-api/contractors/utils.js +25 -25
  99. package/src/saas/internal-api/dashboard/api/recordList.api.js +38 -38
  100. package/src/saas/internal-api/dashboard/api/recordList.service.js +60 -60
  101. package/src/saas/internal-api/dashboard/index.js +5 -5
  102. package/src/saas/internal-api/dashboard/models/dashboard.filter.criteria.model.js +38 -38
  103. package/src/saas/internal-api/dbEmails/api/db.emails.api.js +25 -25
  104. package/src/saas/internal-api/dbEmails/api/db.emails.service.js +147 -147
  105. package/src/saas/internal-api/dbEmails/consts/consts.js +54 -54
  106. package/src/saas/internal-api/dbEmails/index.js +6 -6
  107. package/src/saas/internal-api/dbEmails/models/db.emails.model.js +22 -22
  108. package/src/saas/internal-api/dbEmails/utils/util.js +82 -82
  109. package/src/saas/internal-api/emailCustomization/api/email.customization.api.js +26 -26
  110. package/src/saas/internal-api/emailCustomization/api/email.customization.service.js +50 -50
  111. package/src/saas/internal-api/emailCustomization/index.js +3 -3
  112. package/src/saas/internal-api/globalRecord/api/global.record.api.js +95 -95
  113. package/src/saas/internal-api/globalRecord/api/global.record.service.js +105 -105
  114. package/src/saas/internal-api/globalRecord/consts.js +20 -20
  115. package/src/saas/internal-api/globalRecord/index.js +6 -6
  116. package/src/saas/internal-api/globalRecord/models/global.record.model.js +60 -60
  117. package/src/saas/internal-api/globalRecord/utils/util.js +161 -161
  118. package/src/saas/internal-api/homepageCharts/api/charts.api.js +12 -12
  119. package/src/saas/internal-api/homepageCharts/api/charts.service.js +7 -7
  120. package/src/saas/internal-api/homepageCharts/index.js +3 -3
  121. package/src/saas/internal-api/projects/api/core/projects.api.js +39 -39
  122. package/src/saas/internal-api/projects/api/core/projects.service.js +65 -65
  123. package/src/saas/internal-api/projects/api/settings/project.settings.api.js +18 -18
  124. package/src/saas/internal-api/projects/api/settings/project.settings.service.js +35 -35
  125. package/src/saas/internal-api/projects/consts/defaultProject.js +3 -3
  126. package/src/saas/internal-api/projects/index.js +24 -24
  127. package/src/saas/internal-api/projects/models/core/create.project.model.js +41 -41
  128. package/src/saas/internal-api/projects/models/core/update.project.model.js +47 -47
  129. package/src/saas/internal-api/projects/models/settings/update.project.settings.model.js +41 -41
  130. package/src/saas/internal-api/projects/utils/utils.js +156 -156
  131. package/src/saas/internal-api/recordNotes/api/record.notes.api.js +38 -38
  132. package/src/saas/internal-api/recordNotes/api/record.notes.service.js +47 -47
  133. package/src/saas/internal-api/recordNotes/api/record.notes.utils.js +12 -12
  134. package/src/saas/internal-api/recordNotes/index.js +3 -3
  135. package/src/saas/internal-api/reports/api/reports.api.js +39 -39
  136. package/src/saas/internal-api/reports/api/reports.service.js +34 -34
  137. package/src/saas/internal-api/reports/consts/consts.js +65 -64
  138. package/src/saas/internal-api/reports/index.js +15 -15
  139. package/src/saas/internal-api/reports/models/report.model.js +27 -27
  140. package/src/saas/internal-api/requests/api/requests.api.js +120 -96
  141. package/src/saas/internal-api/requests/api/requests.service.js +272 -220
  142. package/src/saas/internal-api/requests/index.js +20 -18
  143. package/src/saas/internal-api/requests/models/create.request.model.js +33 -34
  144. package/src/saas/internal-api/requests/models/draft.request.criteria.model.js +18 -0
  145. package/src/saas/internal-api/requests/models/draft.request.report.model.js +14 -14
  146. package/src/saas/internal-api/requests/models/edit.request.model.js +31 -31
  147. package/src/saas/internal-api/requests/models/requestListCriteriaModel.js +17 -17
  148. package/src/saas/internal-api/requests/models/tenant.request.model.js +9 -9
  149. package/src/saas/internal-api/requests/utils.js +8 -8
  150. package/src/saas/internal-api/requestsTable/api/requests.table.api.js +20 -20
  151. package/src/saas/internal-api/requestsTable/api/requests.table.service.js +14 -14
  152. package/src/saas/internal-api/requestsTable/index.js +3 -3
  153. package/src/saas/internal-api/requirements/api/requirements.api.js +51 -51
  154. package/src/saas/internal-api/requirements/api/requirements.service.js +153 -153
  155. package/src/saas/internal-api/requirements/consts/attributeTypes.json +6 -6
  156. package/src/saas/internal-api/requirements/consts/consts.js +6 -6
  157. package/src/saas/internal-api/requirements/index.js +10 -10
  158. package/src/saas/internal-api/requirements/models/create.requirement.model.js +17 -17
  159. package/src/saas/internal-api/requirements/models/policy.model.js +33 -33
  160. package/src/saas/internal-api/requirements/models/update.requirement.model.js +19 -19
  161. package/src/saas/internal-api/requirements/utils/utils.js +116 -116
  162. package/src/saas/internal-api/serviceArea/api/coordinates.api.js +12 -12
  163. package/src/saas/internal-api/serviceArea/api/coordinates.service.js +7 -7
  164. package/src/saas/internal-api/serviceArea/index.js +4 -4
  165. package/src/saas/internal-api/serviceArea/utils/utils.js +8 -8
  166. package/src/saas/internal-api/tabs/api/tabs.api.js +32 -32
  167. package/src/saas/internal-api/tabs/api/tabs.service.js +54 -54
  168. package/src/saas/internal-api/tabs/index.js +3 -3
  169. package/src/saas/internal-api/tabs/models/tabs.model.js +19 -19
  170. package/src/saas/internal-api/thread-scheduler/runner.js +39 -39
  171. package/src/saas/internal-api/uploadFiles/api/upload.file.api.js +31 -31
  172. package/src/saas/internal-api/uploadFiles/api/upload.file.service.js +42 -42
  173. package/src/saas/internal-api/uploadFiles/consts.js +12 -12
  174. package/src/saas/internal-api/uploadFiles/index.js +3 -3
  175. package/src/saas/internal-api/users/api/tenantApp/tenant.app.api.js +32 -32
  176. package/src/saas/internal-api/users/api/tenantApp/tenant.app.service.js +97 -97
  177. package/src/saas/internal-api/users/api/users.api.js +115 -115
  178. package/src/saas/internal-api/users/api/users.service.js +203 -203
  179. package/src/saas/internal-api/users/index.js +16 -16
  180. package/src/saas/internal-api/users/models/create.inner.system.user.model.js +18 -18
  181. package/src/saas/internal-api/users/models/notification.settings.model.js +12 -12
  182. package/src/saas/internal-api/users/models/tenent.user.model.js +11 -11
  183. package/src/saas/internal-api/users/models/users.model.js +41 -41
  184. package/src/saas/internal-api/users/utils/util.js +39 -39
  185. package/src/saas/internal-api/vendorProfile/api/vendor.profile.api.js +20 -20
  186. package/src/saas/internal-api/vendorProfile/api/vendor.profile.service.js +14 -14
  187. package/src/saas/internal-api/vendorProfile/index.js +3 -3
  188. package/src/saas/openapi/accounts/accounts.api.js +17 -17
  189. package/src/saas/openapi/accounts/accounts.service.js +11 -11
  190. package/src/saas/openapi/coi/coi.api.js +20 -20
  191. package/src/saas/openapi/coi/coi.service.js +13 -13
  192. package/src/saas/openapi/projects/projects.api.js +83 -83
  193. package/src/saas/openapi/projects/projects.service.js +64 -64
  194. package/src/saas/openapi/requests/index.js +7 -7
  195. package/src/saas/openapi/requests/models/invite.request.model.js +37 -37
  196. package/src/saas/openapi/requests/models/update.request.model.js +35 -35
  197. package/src/saas/openapi/requests/requests.api.js +82 -82
  198. package/src/saas/openapi/requests/requests.service.js +70 -70
  199. package/src/saas/openapi/requirements/index.js +6 -6
  200. package/src/saas/openapi/requirements/models/copy.requirement.model.js +10 -10
  201. package/src/saas/openapi/requirements/requirements.api.js +32 -32
  202. package/src/saas/openapi/requirements/requirements.service.js +37 -37
  203. package/src/saas/openapi/tabs/index.js +6 -6
  204. package/src/saas/openapi/tabs/models/create.tab.model.js +6 -6
  205. package/src/saas/openapi/tabs/tabs.api.js +27 -27
  206. package/src/saas/openapi/tabs/tabs.service.js +19 -19
  207. package/src/saas/openapi/users/user.model.js +10 -10
  208. package/src/saas/openapi/users/users.api.js +33 -33
  209. package/src/saas/openapi/users/users.service.js +41 -41
  210. package/tests/env.test.js +40 -40
  211. package/tests/validation.test.js +83 -83
  212. package/.npmrc.bak +0 -2
  213. package/package.json.bak +0 -30
@@ -1,247 +1,259 @@
1
- const contractorsAPI = require('./contractors.api');
2
- const { RequestModel } = require('../../requests/models/edit.request.model');
3
- const { validateType } = require('../../../../common/validations/typeValidations');
4
- const { RecordModifyDateVerificationModel } = require('../models/verification.contractor.model');
5
- const { AssignRequirementModel } = require('../models/assign.requirement.model');
6
- const { ContractorDetailsModel } = require('../models/edit.contractor.model');
7
- const httpResponseStatusCodes = require('../../../../common/httpResponseStatusCodes.json');
8
- const { waitFor } = require('../../../../common/utils/timeUtils');
9
- const activationStatuses = require('../../../../common/consts/activationStatuses');
10
- const utils = require('../utils');
11
- const requestService = require('../../requests/api/requests.service');
12
-
13
- const getContractorsByAccountId = async (accountId, context, activationStatus = null) => {
14
- if (activationStatus) {
15
- activationStatus = activationStatus.reduce((f, s) => `${f},${s}`);
16
- }
17
-
18
- return contractorsAPI.getContractorsByAccountId({ accountId, activationStatus }, context);
19
- };
20
-
21
- const getContractorById = (contractorId, context) => {
22
- return contractorsAPI.getContractorById(contractorId, context);
23
- };
24
-
25
- const getRecordHistory = (contractorId, context) => {
26
- return contractorsAPI.getRecordHistory(contractorId, context);
27
- };
28
-
29
- const archiveRecord = (recordVerificationModel, context) => {
30
- validateType(recordVerificationModel, RecordModifyDateVerificationModel);
31
- return contractorsAPI.archiveRecord(recordVerificationModel, context);
32
- };
33
-
34
- const restoreRecord = (recordVerificationModel, context) => {
35
- validateType(recordVerificationModel, RecordModifyDateVerificationModel);
36
- return contractorsAPI.restoreRecord(recordVerificationModel, context);
37
- };
38
-
39
- const editContractor = (editRequestModel, context) => {
40
- validateType(editRequestModel, RequestModel);
41
- return contractorsAPI.editContractor(editRequestModel, context);
42
- };
43
-
44
- const updateExpiryDate = (contractorId, expiryDate, policyName) => {
45
- return contractorsAPI.updateExpiryDate(contractorId, expiryDate, policyName);
46
- };
47
-
48
- const assignRequirement = (requestId, assignRequirementModel, context) => {
49
- return contractorsAPI.assignRequirement(requestId, assignRequirementModel, context);
50
- };
51
-
52
- const updateInviteDate = (contractorId, inviteDate, context) => {
53
- return contractorsAPI.updateInviteDate(contractorId, inviteDate, context);
54
- };
55
-
56
- const updateLastInviteActionDate = (recordId, dateOffset, context) => {
57
- return contractorsAPI.updateLastInviteActionDate(recordId, dateOffset, context);
58
- };
59
-
60
- const getContractorsByTabId = (tabId, context, activityStatus = 'Active') => {
61
- return contractorsAPI.getContractorsByTabId(tabId, context, activityStatus);
62
- };
63
-
64
- const searchInAutoComplete = ({ tabId, searchWord }, context) => {
65
- return contractorsAPI.searchInAutocomplete({ tabId, searchWord }, context);
66
- };
67
-
68
- const updateContractorUploadDate = (contractorId, uploadDate, context) => {
69
- validateType(uploadDate, Date);
70
- return contractorsAPI.updateContractorUploadDate(contractorId, uploadDate, context);
71
- };
72
-
73
- const changeRequirement = (recordModifyDateVerificationModel, context) => {
74
- validateType(recordModifyDateVerificationModel, RecordModifyDateVerificationModel);
75
- return contractorsAPI.changeRequirement(recordModifyDateVerificationModel, context);
76
- };
77
-
78
- const sendGaps = (requestId, recordModifyDateVerificationModel, context) => {
79
- validateType(recordModifyDateVerificationModel, RecordModifyDateVerificationModel);
80
- return contractorsAPI.sendGaps(requestId, recordModifyDateVerificationModel, context);
81
- };
82
-
83
- const requestNewCoiAboutToExpire = (requestId, recordModifyDateVerificationModel, context) => {
84
- validateType(recordModifyDateVerificationModel, RecordModifyDateVerificationModel);
85
- return contractorsAPI.requestNewCoiAboutToExpire(requestId, recordModifyDateVerificationModel, context);
86
- };
87
-
88
- const requestNewCoiExpired = (requestId, recordModifyDateVerificationModel, context) => {
89
- validateType(recordModifyDateVerificationModel, RecordModifyDateVerificationModel);
90
- return contractorsAPI.requestNewCoiExpired(requestId, recordModifyDateVerificationModel, context);
91
- };
92
-
93
- const resendInvitation = (requestId, recordModifyDateVerificationModel, context) => {
94
- validateType(recordModifyDateVerificationModel, RecordModifyDateVerificationModel);
95
- return contractorsAPI.resendInvitation(requestId, recordModifyDateVerificationModel, context);
96
- };
97
-
98
- const muteNotifications = (recordModifyDateVerificationModel, context) => {
99
- validateType(recordModifyDateVerificationModel, RecordModifyDateVerificationModel);
100
- return contractorsAPI.muteNotifications(recordModifyDateVerificationModel, context);
101
- };
102
-
103
- const unmuteNotifications = (recordModifyDateVerificationModel, context) => {
104
- validateType(recordModifyDateVerificationModel, RecordModifyDateVerificationModel);
105
- return contractorsAPI.unmuteNotifications(recordModifyDateVerificationModel, context);
106
- };
107
-
108
- const deleteByContractorId = (contractorId, context) => {
109
- return contractorsAPI.deleteByContractorId(contractorId, context);
110
- };
111
-
112
- const deleteAllRecordsInAccount = async (accountId, context, { activationStatus = [activationStatuses.ACTIVE, activationStatuses.ARCHIVED, activationStatuses.DRAFT] } = {}) => {
113
- const { data: existingRecords } = await getContractorsByAccountId(accountId, context, activationStatus);
114
-
115
- if (!existingRecords.length) {
116
- return;
117
- }
118
-
119
- const failed = [];
120
- for (const record of existingRecords) {
121
- const response = await deleteByContractorId(record.id, context);
122
-
123
- if (response.status !== httpResponseStatusCodes.NO_CONTENT) {
124
- console.error(`Failed to delete record: ${record.company}, retrying...`);
125
- waitFor(1000);
126
- const try2response = await deleteByContractorId(record.id, context);
127
-
128
- if (try2response.status !== httpResponseStatusCodes.NO_CONTENT) {
129
- console.error(`Failed to delete record: ${record.company} second time.`);
130
- failed.push(response);
131
- }
132
- }
133
- }
134
-
135
- if (failed.length) {
136
- throw Error(`Failed to delete ${failed.length} of ${existingRecords.length} records in account. Failed with status: ${ failed[0].status }`);
137
- }
138
- };
139
-
140
- const deleteAllActiveRecordsInAccount = async (accountId, context) => {
141
- return deleteAllRecordsInAccount(accountId, context, { activationStatus: [activationStatuses.ACTIVE] });
142
- };
143
-
144
- const getRecordVerificationModel = async (recordId, context, { requirementId, requirementDateModified } = {}) => {
145
- const { data: recordData } = await getContractorById(recordId, context);
146
- return new RecordModifyDateVerificationModel(recordData.id, { contractorDateModified: recordData.dateModified, requirementId, requirementDateModified });
147
- };
148
-
149
- const getRecordVerificationModelForDraftRecord = (request, { requirementId, requirementDateModified } = {}) => {
150
- const { record } = request;
151
- return new RecordModifyDateVerificationModel(record.id, { contractorDateModified: record.dateModified, requirementId, requirementDateModified });
152
- };
153
-
154
- const getAssignRequirementModel = (requirementId, companyName, emailAddress) => {
155
- return new AssignRequirementModel(requirementId, companyName, emailAddress);
156
- };
157
-
158
- const getLinkedProjectsCount = (recordId, context) => {
159
- return contractorsAPI.getLinkedProjectsCount(recordId, context);
160
- };
161
-
162
- const restoreByRecordId = async (recordId, context) => {
163
- const recordModifyModel = await getRecordVerificationModel(recordId, context);
164
- const restoreResponse = await restoreRecord(recordModifyModel, context);
165
-
166
- if (restoreResponse.status !== httpResponseStatusCodes.OK) {
167
- throw new Error(`Failed to restore record "${recordId}"\n${restoreResponse.statusText}`);
168
- }
169
-
170
- return restoreResponse;
171
- };
172
-
173
- const archiveByRecordId = async (recordId, context) => {
174
- const recordModifyModel = await getRecordVerificationModel(recordId, context);
175
- const archiveResponse = await archiveRecord(recordModifyModel, context);
176
-
177
- if (archiveResponse.status !== httpResponseStatusCodes.OK) {
178
- throw new Error(`Failed to archive record "${recordId}"\n${archiveResponse.statusText}`);
179
- }
180
-
181
- return archiveResponse;
182
- };
183
-
184
- const getInviteLinkStatus = (encryptedData, context) => {
185
- return contractorsAPI.getInviteLinkStatus(encryptedData, context);
186
- };
187
-
188
- const getContractorDetailsModel = recordConfig => {
189
- const apiDetailsConfig = utils.getRecordDetailsConfigInApiFormat(recordConfig);
190
- return new ContractorDetailsModel(apiDetailsConfig);
191
- };
192
-
193
- const getBasicDetailsById = async recordId => {
194
- const response = await contractorsAPI.getBasicDetailsById(recordId);
195
-
196
- if (response.status !== httpResponseStatusCodes.OK) {
197
- throw Error(`Failed to get basic record details by record id: ${recordId} - Response: ${response.status}`);
198
- }
199
-
200
- return response.data;
201
- };
202
-
203
- const getRecordsFromInsuredName = async (insuredName, accountIds) => {
204
- const response = await contractorsAPI.getRecordsFromInsuredName(insuredName, accountIds);
205
-
206
- if (response.status !== httpResponseStatusCodes.OK) {
207
- throw Error(`Failed to get records from insured name: ${insuredName} and accountIds: ${accountIds} - Response: ${response.status}`);
208
- }
209
-
210
- return response.data;
211
- };
212
-
213
- module.exports = {
214
- changeRequirement,
215
- getContractorsByAccountId,
216
- getContractorById,
217
- getRecordHistory,
218
- archiveRecord,
219
- restoreRecord,
220
- editContractor,
221
- updateInviteDate,
222
- updateExpiryDate,
223
- getContractorsByTabId,
224
- searchInAutoComplete,
225
- updateContractorUploadDate,
226
- sendGaps,
227
- requestNewCoiAboutToExpire,
228
- requestNewCoiExpired,
229
- resendInvitation,
230
- muteNotifications,
231
- unmuteNotifications,
232
- deleteByContractorId,
233
- deleteAllRecordsInAccount,
234
- deleteAllActiveRecordsInAccount,
235
- getRecordVerificationModel,
236
- getRecordVerificationModelForDraftRecord,
237
- assignRequirement,
238
- getAssignRequirementModel,
239
- getLinkedProjectsCount,
240
- archiveByRecordId,
241
- restoreByRecordId,
242
- updateLastInviteActionDate,
243
- getInviteLinkStatus,
244
- getContractorDetailsModel,
245
- getBasicDetailsById,
246
- getRecordsFromInsuredName
247
- };
1
+ const contractorsAPI = require('./contractors.api');
2
+ const { RequestModel } = require('../../requests/models/edit.request.model');
3
+ const { validateType } = require('../../../../common/validations/typeValidations');
4
+ const { RecordModifyDateVerificationModel } = require('../models/verification.contractor.model');
5
+ const { AssignRequirementModel } = require('../models/assign.requirement.model');
6
+ const { ContractorDetailsModel } = require('../models/edit.contractor.model');
7
+ const { LinkRequestModel } = require('../models/link.request.model');
8
+ const httpResponseStatusCodes = require('../../../../common/httpResponseStatusCodes.json');
9
+ const { waitFor } = require('../../../../common/utils/timeUtils');
10
+ const activationStatuses = require('../../../../common/consts/activationStatuses');
11
+ const utils = require('../utils');
12
+
13
+ const getContractorsByAccountId = async (accountId, context, activationStatus = null) => {
14
+ if (activationStatus) {
15
+ activationStatus = activationStatus.reduce((f, s) => `${f},${s}`);
16
+ }
17
+
18
+ return contractorsAPI.getContractorsByAccountId({ accountId, activationStatus }, context);
19
+ };
20
+
21
+ const getContractorById = (contractorId, context) => {
22
+ return contractorsAPI.getContractorById(contractorId, context);
23
+ };
24
+
25
+ const getRecordHistory = (contractorId, context) => {
26
+ return contractorsAPI.getRecordHistory(contractorId, context);
27
+ };
28
+
29
+ const archiveRecord = (recordVerificationModel, context) => {
30
+ validateType(recordVerificationModel, RecordModifyDateVerificationModel);
31
+ return contractorsAPI.archiveRecord(recordVerificationModel, context);
32
+ };
33
+
34
+ const restoreRecord = (recordVerificationModel, context) => {
35
+ validateType(recordVerificationModel, RecordModifyDateVerificationModel);
36
+ return contractorsAPI.restoreRecord(recordVerificationModel, context);
37
+ };
38
+
39
+ const editContractor = (editRequestModel, context) => {
40
+ validateType(editRequestModel, RequestModel);
41
+ return contractorsAPI.editContractor(editRequestModel, context);
42
+ };
43
+
44
+ const updateExpiryDate = (contractorId, expiryDate, policyName) => {
45
+ return contractorsAPI.updateExpiryDate(contractorId, expiryDate, policyName);
46
+ };
47
+
48
+ const assignRequirement = (requestId, assignRequirementModel, context) => {
49
+ return contractorsAPI.assignRequirement(requestId, assignRequirementModel, context);
50
+ };
51
+
52
+ const updateInviteDate = (contractorId, inviteDate, context) => {
53
+ return contractorsAPI.updateInviteDate(contractorId, inviteDate, context);
54
+ };
55
+
56
+ const updateLastInviteActionDate = (recordId, dateOffset, context) => {
57
+ return contractorsAPI.updateLastInviteActionDate(recordId, dateOffset, context);
58
+ };
59
+
60
+ const getContractorsByTabId = (tabId, context, activityStatus = 'Active') => {
61
+ return contractorsAPI.getContractorsByTabId(tabId, context, activityStatus);
62
+ };
63
+
64
+ const searchInAutoComplete = ({ tabId, searchWord }, context) => {
65
+ return contractorsAPI.searchInAutocomplete({ tabId, searchWord }, context);
66
+ };
67
+
68
+ const updateContractorUploadDate = (contractorId, uploadDate, context) => {
69
+ validateType(uploadDate, Date);
70
+ return contractorsAPI.updateContractorUploadDate(contractorId, uploadDate, context);
71
+ };
72
+
73
+ const changeRequirement = (recordModifyDateVerificationModel, context) => {
74
+ validateType(recordModifyDateVerificationModel, RecordModifyDateVerificationModel);
75
+ return contractorsAPI.changeRequirement(recordModifyDateVerificationModel, context);
76
+ };
77
+
78
+ const sendGaps = (requestId, recordModifyDateVerificationModel, context) => {
79
+ validateType(recordModifyDateVerificationModel, RecordModifyDateVerificationModel);
80
+ return contractorsAPI.sendGaps(requestId, recordModifyDateVerificationModel, context);
81
+ };
82
+
83
+ const requestNewCoiAboutToExpire = (requestId, recordModifyDateVerificationModel, context) => {
84
+ validateType(recordModifyDateVerificationModel, RecordModifyDateVerificationModel);
85
+ return contractorsAPI.requestNewCoiAboutToExpire(requestId, recordModifyDateVerificationModel, context);
86
+ };
87
+
88
+ const requestNewCoiExpired = (requestId, recordModifyDateVerificationModel, context) => {
89
+ validateType(recordModifyDateVerificationModel, RecordModifyDateVerificationModel);
90
+ return contractorsAPI.requestNewCoiExpired(requestId, recordModifyDateVerificationModel, context);
91
+ };
92
+
93
+ const resendInvitation = (requestId, recordModifyDateVerificationModel, context) => {
94
+ validateType(recordModifyDateVerificationModel, RecordModifyDateVerificationModel);
95
+ return contractorsAPI.resendInvitation(requestId, recordModifyDateVerificationModel, context);
96
+ };
97
+
98
+ const muteNotifications = (recordModifyDateVerificationModel, context) => {
99
+ validateType(recordModifyDateVerificationModel, RecordModifyDateVerificationModel);
100
+ return contractorsAPI.muteNotifications(recordModifyDateVerificationModel, context);
101
+ };
102
+
103
+ const unmuteNotifications = (recordModifyDateVerificationModel, context) => {
104
+ validateType(recordModifyDateVerificationModel, RecordModifyDateVerificationModel);
105
+ return contractorsAPI.unmuteNotifications(recordModifyDateVerificationModel, context);
106
+ };
107
+
108
+ const deleteByContractorId = (contractorId, context) => {
109
+ return contractorsAPI.deleteByContractorId(contractorId, context);
110
+ };
111
+
112
+ const deleteAllRecordsInAccount = async (accountId, context, { activationStatus = [activationStatuses.ACTIVE, activationStatuses.ARCHIVED, activationStatuses.DRAFT] } = {}) => {
113
+ const { data: existingRecords } = await getContractorsByAccountId(accountId, context, activationStatus);
114
+
115
+ if (!existingRecords.length) {
116
+ return;
117
+ }
118
+
119
+ const failed = [];
120
+ for (const record of existingRecords) {
121
+ const response = await deleteByContractorId(record.id, context);
122
+
123
+ if (response.status !== httpResponseStatusCodes.NO_CONTENT) {
124
+ console.error(`Failed to delete record: ${record.company}, retrying...`);
125
+ waitFor(1000);
126
+ const try2response = await deleteByContractorId(record.id, context);
127
+
128
+ if (try2response.status !== httpResponseStatusCodes.NO_CONTENT) {
129
+ console.error(`Failed to delete record: ${record.company} second time.`);
130
+ failed.push(response);
131
+ }
132
+ }
133
+ }
134
+
135
+ if (failed.length) {
136
+ throw Error(`Failed to delete ${failed.length} of ${existingRecords.length} records in account. Failed with status: ${ failed[0].status }`);
137
+ }
138
+ };
139
+
140
+ const deleteAllActiveRecordsInAccount = async (accountId, context) => {
141
+ return deleteAllRecordsInAccount(accountId, context, { activationStatus: [activationStatuses.ACTIVE] });
142
+ };
143
+
144
+ const getRecordVerificationModel = async (recordId, context, { requirementId, requirementDateModified } = {}) => {
145
+ const { data: recordData } = await getContractorById(recordId, context);
146
+ return new RecordModifyDateVerificationModel(recordData.id, { contractorDateModified: recordData.dateModified, requirementId, requirementDateModified });
147
+ };
148
+
149
+ const getRecordVerificationModelForDraftRecord = (request, { requirementId, requirementDateModified } = {}) => {
150
+ const { record } = request;
151
+ return new RecordModifyDateVerificationModel(record.id, { contractorDateModified: record.dateModified, requirementId, requirementDateModified });
152
+ };
153
+
154
+ const getAssignRequirementModel = (requirementId, companyName, emailAddress) => {
155
+ return new AssignRequirementModel(requirementId, companyName, emailAddress);
156
+ };
157
+
158
+ const getLinkedProjectsCount = (recordId, context) => {
159
+ return contractorsAPI.getLinkedProjectsCount(recordId, context);
160
+ };
161
+
162
+ const restoreByRecordId = async (recordId, context) => {
163
+ const recordModifyModel = await getRecordVerificationModel(recordId, context);
164
+ const restoreResponse = await restoreRecord(recordModifyModel, context);
165
+
166
+ if (restoreResponse.status !== httpResponseStatusCodes.OK) {
167
+ throw new Error(`Failed to restore record "${recordId}"\n${restoreResponse.statusText}`);
168
+ }
169
+
170
+ return restoreResponse;
171
+ };
172
+
173
+ const archiveByRecordId = async (recordId, context) => {
174
+ const recordModifyModel = await getRecordVerificationModel(recordId, context);
175
+ const archiveResponse = await archiveRecord(recordModifyModel, context);
176
+
177
+ if (archiveResponse.status !== httpResponseStatusCodes.OK) {
178
+ throw new Error(`Failed to archive record "${recordId}"\n${archiveResponse.statusText}`);
179
+ }
180
+
181
+ return archiveResponse;
182
+ };
183
+
184
+ const getInviteLinkStatus = (encryptedData, context) => {
185
+ return contractorsAPI.getInviteLinkStatus(encryptedData, context);
186
+ };
187
+
188
+ const getContractorDetailsModel = recordConfig => {
189
+ const apiDetailsConfig = utils.getRecordDetailsConfigInApiFormat(recordConfig);
190
+ return new ContractorDetailsModel(apiDetailsConfig);
191
+ };
192
+
193
+ const getBasicDetailsById = async recordId => {
194
+ const response = await contractorsAPI.getBasicDetailsById(recordId);
195
+
196
+ if (response.status !== httpResponseStatusCodes.OK) {
197
+ throw Error(`Failed to get basic record details by record id: ${recordId} - Response: ${response.status}`);
198
+ }
199
+
200
+ return response.data;
201
+ };
202
+
203
+ const getRecordsFromInsuredName = async (insuredName, accountIds) => {
204
+ const response = await contractorsAPI.getRecordsFromInsuredName(insuredName, accountIds);
205
+
206
+ if (response.status !== httpResponseStatusCodes.OK) {
207
+ throw Error(`Failed to get records from insured name: ${insuredName} and accountIds: ${accountIds} - Response: ${response.status}`);
208
+ }
209
+
210
+ return response.data;
211
+ };
212
+
213
+ const linkDraftRequestToAccountRecord = async (requestToLink, targetAccountRecord, context, { shouldExpectError } = {}) => {
214
+ const linkRequestModel = new LinkRequestModel(requestToLink, targetAccountRecord);
215
+ const linkRequestResponse = await contractorsAPI.linkDraftRequestToAccountRecord(linkRequestModel, context);
216
+
217
+ if (linkRequestResponse.status !== httpResponseStatusCodes.OK && !shouldExpectError) {
218
+ throw Error(`Failed to link request - ${requestToLink.id} to accountRecord ${targetAccountRecord.id}\n${linkRequestResponse}`);
219
+ } else {
220
+ return linkRequestResponse;
221
+ }
222
+ };
223
+
224
+ module.exports = {
225
+ changeRequirement,
226
+ getContractorsByAccountId,
227
+ getContractorById,
228
+ getRecordHistory,
229
+ archiveRecord,
230
+ restoreRecord,
231
+ editContractor,
232
+ updateInviteDate,
233
+ updateExpiryDate,
234
+ getContractorsByTabId,
235
+ searchInAutoComplete,
236
+ updateContractorUploadDate,
237
+ sendGaps,
238
+ requestNewCoiAboutToExpire,
239
+ requestNewCoiExpired,
240
+ resendInvitation,
241
+ muteNotifications,
242
+ unmuteNotifications,
243
+ deleteByContractorId,
244
+ deleteAllRecordsInAccount,
245
+ deleteAllActiveRecordsInAccount,
246
+ getRecordVerificationModel,
247
+ getRecordVerificationModelForDraftRecord,
248
+ assignRequirement,
249
+ getAssignRequirementModel,
250
+ getLinkedProjectsCount,
251
+ archiveByRecordId,
252
+ restoreByRecordId,
253
+ updateLastInviteActionDate,
254
+ getInviteLinkStatus,
255
+ getContractorDetailsModel,
256
+ getBasicDetailsById,
257
+ getRecordsFromInsuredName,
258
+ linkDraftRequestToAccountRecord
259
+ };
@@ -1,6 +1,6 @@
1
- const RECORD_SHARING_LEVEL = {
2
- account: 'Account',
3
- tab: 'Tab'
4
- };
5
-
6
- module.exports = { RECORD_SHARING_LEVEL };
1
+ const RECORD_SHARING_LEVEL = {
2
+ account: 'Account',
3
+ tab: 'Tab'
4
+ };
5
+
6
+ module.exports = { RECORD_SHARING_LEVEL };
@@ -1,8 +1,8 @@
1
- const editModel = require('./models/edit.contractor.model');
2
- const verificationModel = require('./models/verification.contractor.model');
3
- const assignRequirementModel = require('./models/assign.requirement.model');
4
- const services = require('./api/contractors.service');
5
-
6
- const models = { edit: editModel, verification: verificationModel, assignRequirementModel };
7
-
8
- module.exports = { services, models };
1
+ const editModel = require('./models/edit.contractor.model');
2
+ const verificationModel = require('./models/verification.contractor.model');
3
+ const assignRequirementModel = require('./models/assign.requirement.model');
4
+ const services = require('./api/contractors.service');
5
+
6
+ const models = { edit: editModel, verification: verificationModel, assignRequirementModel };
7
+
8
+ module.exports = { services, models };
@@ -1,10 +1,10 @@
1
- class AssignRequirementModel {
2
- constructor(requirementId, companyName, emailAddress, { fileName = null, disableMail = false } = {}) {
3
- this.requirementId = requirementId;
4
- this.companyName = companyName;
5
- this.emailAddress = emailAddress;
6
- this.fileName = fileName;
7
- this.disableMail = disableMail;
8
- }
9
- }
10
- module.exports = { AssignRequirementModel };
1
+ class AssignRequirementModel {
2
+ constructor(requirementId, companyName, emailAddress, { fileName = null, disableMail = false } = {}) {
3
+ this.requirementId = requirementId;
4
+ this.companyName = companyName;
5
+ this.emailAddress = emailAddress;
6
+ this.fileName = fileName;
7
+ this.disableMail = disableMail;
8
+ }
9
+ }
10
+ module.exports = { AssignRequirementModel };