@researchdatabox/redbox-core 0.0.1-beta.9225 → 0.0.1-beta.9474
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/dist/CoreController.d.ts +4 -0
- package/dist/CoreController.d.ts.map +1 -1
- package/dist/CoreController.js +33 -1
- package/dist/DatastreamService.d.ts +5 -2
- package/dist/DatastreamService.d.ts.map +1 -1
- package/dist/QueueService.d.ts +1 -1
- package/dist/QueueService.d.ts.map +1 -1
- package/dist/RecordsService.d.ts +38 -2
- package/dist/RecordsService.d.ts.map +1 -1
- package/dist/StorageService.d.ts +2 -1
- package/dist/StorageService.d.ts.map +1 -1
- package/dist/api-routes/apib.d.ts +7 -0
- package/dist/api-routes/apib.d.ts.map +1 -0
- package/dist/api-routes/apib.js +43 -0
- package/dist/api-routes/define.d.ts +4 -0
- package/dist/api-routes/define.d.ts.map +1 -0
- package/dist/api-routes/define.js +29 -0
- package/dist/api-routes/groups/admin.d.ts +6 -0
- package/dist/api-routes/groups/admin.d.ts.map +1 -0
- package/dist/api-routes/groups/admin.js +53 -0
- package/dist/api-routes/groups/appconfig.d.ts +4 -0
- package/dist/api-routes/groups/appconfig.d.ts.map +1 -0
- package/dist/api-routes/groups/appconfig.js +33 -0
- package/dist/api-routes/groups/branding.d.ts +8 -0
- package/dist/api-routes/groups/branding.d.ts.map +1 -0
- package/dist/api-routes/groups/branding.js +61 -0
- package/dist/api-routes/groups/dashboard-config.d.ts +11 -0
- package/dist/api-routes/groups/dashboard-config.d.ts.map +1 -0
- package/dist/api-routes/groups/dashboard-config.js +90 -0
- package/dist/api-routes/groups/export.d.ts +3 -0
- package/dist/api-routes/groups/export.d.ts.map +1 -0
- package/dist/api-routes/groups/export.js +30 -0
- package/dist/api-routes/groups/forms.d.ts +4 -0
- package/dist/api-routes/groups/forms.d.ts.map +1 -0
- package/dist/api-routes/groups/forms.js +29 -0
- package/dist/api-routes/groups/integration-audit.d.ts +3 -0
- package/dist/api-routes/groups/integration-audit.d.ts.map +1 -0
- package/dist/api-routes/groups/integration-audit.js +35 -0
- package/dist/api-routes/groups/notifications.d.ts +3 -0
- package/dist/api-routes/groups/notifications.d.ts.map +1 -0
- package/dist/api-routes/groups/notifications.js +20 -0
- package/dist/api-routes/groups/records.d.ts +28 -0
- package/dist/api-routes/groups/records.d.ts.map +1 -0
- package/dist/api-routes/groups/records.js +349 -0
- package/dist/api-routes/groups/recordtypes.d.ts +4 -0
- package/dist/api-routes/groups/recordtypes.d.ts.map +1 -0
- package/dist/api-routes/groups/recordtypes.js +27 -0
- package/dist/api-routes/groups/reports.d.ts +3 -0
- package/dist/api-routes/groups/reports.d.ts.map +1 -0
- package/dist/api-routes/groups/reports.js +20 -0
- package/dist/api-routes/groups/search-query.d.ts +4 -0
- package/dist/api-routes/groups/search-query.d.ts.map +1 -0
- package/dist/api-routes/groups/search-query.js +51 -0
- package/dist/api-routes/groups/search.d.ts +6 -0
- package/dist/api-routes/groups/search.d.ts.map +1 -0
- package/dist/api-routes/groups/search.js +31 -0
- package/dist/api-routes/groups/translation.d.ts +8 -0
- package/dist/api-routes/groups/translation.d.ts.map +1 -0
- package/dist/api-routes/groups/translation.js +78 -0
- package/dist/api-routes/groups/users.d.ts +17 -0
- package/dist/api-routes/groups/users.d.ts.map +1 -0
- package/dist/api-routes/groups/users.js +149 -0
- package/dist/api-routes/groups/vocabulary.d.ts +10 -0
- package/dist/api-routes/groups/vocabulary.d.ts.map +1 -0
- package/dist/api-routes/groups/vocabulary.js +97 -0
- package/dist/api-routes/helpers.d.ts +29 -0
- package/dist/api-routes/helpers.d.ts.map +1 -0
- package/dist/api-routes/helpers.js +486 -0
- package/dist/api-routes/index.d.ts +25 -0
- package/dist/api-routes/index.d.ts.map +1 -0
- package/dist/api-routes/index.js +41 -0
- package/dist/api-routes/openapi.d.ts +27 -0
- package/dist/api-routes/openapi.d.ts.map +1 -0
- package/dist/api-routes/openapi.js +273 -0
- package/dist/api-routes/request-extraction.d.ts +14 -0
- package/dist/api-routes/request-extraction.d.ts.map +1 -0
- package/dist/api-routes/request-extraction.js +100 -0
- package/dist/api-routes/route-factory.d.ts +3 -0
- package/dist/api-routes/route-factory.d.ts.map +1 -0
- package/dist/api-routes/route-factory.js +30 -0
- package/dist/api-routes/route-registry.d.ts +24 -0
- package/dist/api-routes/route-registry.d.ts.map +1 -0
- package/dist/api-routes/route-registry.js +113 -0
- package/dist/api-routes/route-resolution.d.ts +4 -0
- package/dist/api-routes/route-resolution.d.ts.map +1 -0
- package/dist/api-routes/route-resolution.js +57 -0
- package/dist/api-routes/schemas/common.d.ts +37 -0
- package/dist/api-routes/schemas/common.d.ts.map +1 -0
- package/dist/api-routes/schemas/common.js +147 -0
- package/dist/api-routes/schemas/responses.d.ts +2904 -0
- package/dist/api-routes/schemas/responses.d.ts.map +1 -0
- package/dist/api-routes/schemas/responses.js +417 -0
- package/dist/api-routes/types.d.ts +70 -0
- package/dist/api-routes/types.d.ts.map +1 -0
- package/dist/api-routes/types.js +3 -0
- package/dist/api-routes/validation.d.ts +32 -0
- package/dist/api-routes/validation.d.ts.map +1 -0
- package/dist/api-routes/validation.js +142 -0
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +10 -10
- package/dist/config/agendaQueue.config.d.ts +25 -1
- package/dist/config/agendaQueue.config.d.ts.map +1 -1
- package/dist/config/agendaQueue.config.js +19 -2
- package/dist/config/auth.config.d.ts.map +1 -1
- package/dist/config/auth.config.js +21 -2
- package/dist/config/brandingConfigurationDefaults.config.js +3 -3
- package/dist/config/dashboardtype.config.d.ts +5 -0
- package/dist/config/dashboardtype.config.d.ts.map +1 -1
- package/dist/config/dashboardtype.config.js +1 -1
- package/dist/config/dashboardview.config.d.ts +24 -0
- package/dist/config/dashboardview.config.d.ts.map +1 -0
- package/dist/config/dashboardview.config.js +137 -0
- package/dist/config/dompurify.config.d.ts.map +1 -1
- package/dist/config/dompurify.config.js +2 -2
- package/dist/config/http.config.d.ts.map +1 -1
- package/dist/config/http.config.js +5 -3
- package/dist/config/index.d.ts +6 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +4 -1
- package/dist/config/namedQuery.config.d.ts +10 -2
- package/dist/config/namedQuery.config.d.ts.map +1 -1
- package/dist/config/namedQuery.config.js +17 -17
- package/dist/config/policies.config.d.ts +3 -0
- package/dist/config/policies.config.d.ts.map +1 -1
- package/dist/config/policies.config.js +35 -1
- package/dist/config/record.config.d.ts.map +1 -1
- package/dist/config/record.config.js +2 -1
- package/dist/config/recordtype.config.d.ts +28 -0
- package/dist/config/recordtype.config.d.ts.map +1 -1
- package/dist/config/recordtype.config.js +85 -9
- package/dist/config/routes.config.d.ts +5 -2
- package/dist/config/routes.config.d.ts.map +1 -1
- package/dist/config/routes.config.js +24 -110
- package/dist/config/storage.config.d.ts +20 -2
- package/dist/config/storage.config.d.ts.map +1 -1
- package/dist/config/storage.config.js +2 -1
- package/dist/config/vocab.config.d.ts +30 -0
- package/dist/config/vocab.config.d.ts.map +1 -1
- package/dist/config/vocab.config.js +21 -1
- package/dist/config/webpack.config.d.ts.map +1 -1
- package/dist/config/webpack.config.js +13 -7
- package/dist/config/workflow.config.d.ts +0 -1
- package/dist/config/workflow.config.d.ts.map +1 -1
- package/dist/config/workflow.config.js +1 -137
- package/dist/configmodels/AdminSidebarConfig.d.ts.map +1 -1
- package/dist/configmodels/AdminSidebarConfig.js +1 -2
- package/dist/configmodels/ConfigModels.d.ts +1 -1
- package/dist/configmodels/ConfigModels.d.ts.map +1 -1
- package/dist/configmodels/ConfigModels.js +9 -1
- package/dist/configmodels/DashboardTableOverrideConfig.d.ts +1011 -0
- package/dist/configmodels/DashboardTableOverrideConfig.d.ts.map +1 -0
- package/dist/configmodels/DashboardTableOverrideConfig.js +138 -0
- package/dist/controllers/AdminController.d.ts +0 -1
- package/dist/controllers/AdminController.d.ts.map +1 -1
- package/dist/controllers/AdminController.js +2 -32
- package/dist/controllers/BrandingAppController.d.ts.map +1 -1
- package/dist/controllers/BrandingAppController.js +10 -9
- package/dist/controllers/BrandingController.d.ts +3 -5
- package/dist/controllers/BrandingController.d.ts.map +1 -1
- package/dist/controllers/BrandingController.js +29 -21
- package/dist/controllers/DashboardConfigController.d.ts +8 -0
- package/dist/controllers/DashboardConfigController.d.ts.map +1 -0
- package/dist/controllers/DashboardConfigController.js +17 -0
- package/dist/controllers/DynamicAssetController.d.ts +1 -0
- package/dist/controllers/DynamicAssetController.d.ts.map +1 -1
- package/dist/controllers/DynamicAssetController.js +20 -1
- package/dist/controllers/EmailController.d.ts.map +1 -1
- package/dist/controllers/EmailController.js +16 -12
- package/dist/controllers/FormVocabularyController.d.ts +1 -0
- package/dist/controllers/FormVocabularyController.d.ts.map +1 -1
- package/dist/controllers/FormVocabularyController.js +94 -4
- package/dist/controllers/RecordController.d.ts +18 -1
- package/dist/controllers/RecordController.d.ts.map +1 -1
- package/dist/controllers/RecordController.js +274 -124
- package/dist/controllers/RenderViewController.d.ts.map +1 -1
- package/dist/controllers/RenderViewController.js +4 -2
- package/dist/controllers/TranslationController.d.ts.map +1 -1
- package/dist/controllers/TranslationController.js +12 -10
- package/dist/controllers/WorkspaceTypesController.d.ts +3 -2
- package/dist/controllers/WorkspaceTypesController.d.ts.map +1 -1
- package/dist/controllers/WorkspaceTypesController.js +120 -31
- package/dist/controllers/index.d.ts.map +1 -1
- package/dist/controllers/index.js +7 -4
- package/dist/controllers/webservice/AdminController.d.ts.map +1 -1
- package/dist/controllers/webservice/AdminController.js +15 -16
- package/dist/controllers/webservice/AppConfigController.d.ts.map +1 -1
- package/dist/controllers/webservice/AppConfigController.js +19 -20
- package/dist/controllers/webservice/BrandingController.d.ts.map +1 -1
- package/dist/controllers/webservice/BrandingController.js +101 -47
- package/dist/controllers/webservice/DashboardConfigController.d.ts +26 -0
- package/dist/controllers/webservice/DashboardConfigController.d.ts.map +1 -0
- package/dist/controllers/webservice/DashboardConfigController.js +241 -0
- package/dist/controllers/webservice/ExportController.d.ts.map +1 -1
- package/dist/controllers/webservice/ExportController.js +11 -11
- package/dist/controllers/webservice/FormManagementController.d.ts.map +1 -1
- package/dist/controllers/webservice/FormManagementController.js +11 -13
- package/dist/controllers/webservice/RecordController.d.ts +4 -0
- package/dist/controllers/webservice/RecordController.d.ts.map +1 -1
- package/dist/controllers/webservice/RecordController.js +428 -257
- package/dist/controllers/webservice/RecordTypeController.d.ts.map +1 -1
- package/dist/controllers/webservice/RecordTypeController.js +9 -10
- package/dist/controllers/webservice/ReportController.d.ts.map +1 -1
- package/dist/controllers/webservice/ReportController.js +18 -20
- package/dist/controllers/webservice/SearchController.d.ts.map +1 -1
- package/dist/controllers/webservice/SearchController.js +28 -35
- package/dist/controllers/webservice/TranslationController.d.ts.map +1 -1
- package/dist/controllers/webservice/TranslationController.js +61 -39
- package/dist/controllers/webservice/UserManagementController.d.ts.map +1 -1
- package/dist/controllers/webservice/UserManagementController.js +112 -99
- package/dist/controllers/webservice/VocabularyController.d.ts.map +1 -1
- package/dist/controllers/webservice/VocabularyController.js +76 -28
- package/dist/hooks/defineRedboxHook.d.ts +3 -0
- package/dist/hooks/defineRedboxHook.d.ts.map +1 -1
- package/dist/hooks/defineRedboxHook.js +4 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/loader/index.d.ts +6 -0
- package/dist/loader/index.d.ts.map +1 -1
- package/dist/loader/index.js +57 -10
- package/dist/middleware/redboxSession.js +1 -1
- package/dist/model/DashboardTypeResponseModel.d.ts +13 -1
- package/dist/model/DashboardTypeResponseModel.d.ts.map +1 -1
- package/dist/model/DashboardTypeResponseModel.js +12 -4
- package/dist/model/DashboardViewResponseModel.d.ts +20 -0
- package/dist/model/DashboardViewResponseModel.d.ts.map +1 -0
- package/dist/model/DashboardViewResponseModel.js +38 -0
- package/dist/model/RecordTypeResponseModel.d.ts +3 -1
- package/dist/model/RecordTypeResponseModel.d.ts.map +1 -1
- package/dist/model/RecordTypeResponseModel.js +4 -2
- package/dist/model/RequestDetails.d.ts +1 -1
- package/dist/model/RequestDetails.d.ts.map +1 -1
- package/dist/model/RequestDetails.js +1 -1
- package/dist/model/index.d.ts +1 -0
- package/dist/model/index.d.ts.map +1 -1
- package/dist/model/index.js +5 -2
- package/dist/model/storage/BrandingModel.d.ts +0 -16
- package/dist/model/storage/BrandingModel.d.ts.map +1 -1
- package/dist/model/storage/BrandingModel.js +2 -51
- package/dist/model/storage/DashboardTypeModel.d.ts +4 -0
- package/dist/model/storage/DashboardTypeModel.d.ts.map +1 -1
- package/dist/model/storage/RecordTypeModel.d.ts +16 -0
- package/dist/model/storage/RecordTypeModel.d.ts.map +1 -1
- package/dist/model/storage/RecordTypeModel.js +9 -1
- package/dist/policies/contentSecurityPolicy.d.ts.map +1 -1
- package/dist/policies/contentSecurityPolicy.js +23 -2
- package/dist/policies/index.d.ts +3 -0
- package/dist/policies/index.d.ts.map +1 -1
- package/dist/policies/index.js +6 -2
- package/dist/policies/validateApiContractRequest.d.ts +3 -0
- package/dist/policies/validateApiContractRequest.d.ts.map +1 -0
- package/dist/policies/validateApiContractRequest.js +74 -0
- package/dist/responses/badRequest.d.ts.map +1 -1
- package/dist/responses/badRequest.js +5 -3
- package/dist/responses/created.d.ts.map +1 -1
- package/dist/responses/created.js +5 -3
- package/dist/responses/forbidden.d.ts.map +1 -1
- package/dist/responses/forbidden.js +5 -3
- package/dist/responses/ok.d.ts.map +1 -1
- package/dist/responses/ok.js +5 -3
- package/dist/responses/serverError.d.ts.map +1 -1
- package/dist/responses/serverError.js +5 -3
- package/dist/responses/siteTitle.d.ts +6 -0
- package/dist/responses/siteTitle.d.ts.map +1 -0
- package/dist/responses/siteTitle.js +28 -0
- package/dist/sails.d.ts +7 -0
- package/dist/sails.d.ts.map +1 -1
- package/dist/services/AgendaQueueService.d.ts +38 -17
- package/dist/services/AgendaQueueService.d.ts.map +1 -1
- package/dist/services/AgendaQueueService.js +311 -81
- package/dist/services/AttachmentMetadataService.d.ts +34 -0
- package/dist/services/AttachmentMetadataService.d.ts.map +1 -0
- package/dist/services/AttachmentMetadataService.js +133 -0
- package/dist/services/BrandingLogoService.d.ts +6 -8
- package/dist/services/BrandingLogoService.d.ts.map +1 -1
- package/dist/services/BrandingLogoService.js +66 -72
- package/dist/services/DashboardConfigService.d.ts +71 -0
- package/dist/services/DashboardConfigService.d.ts.map +1 -0
- package/dist/services/DashboardConfigService.js +309 -0
- package/dist/services/DashboardTypesService.d.ts +61 -63
- package/dist/services/DashboardTypesService.d.ts.map +1 -1
- package/dist/services/DashboardTypesService.js +361 -198
- package/dist/services/DoiService.d.ts +11 -0
- package/dist/services/DoiService.d.ts.map +1 -1
- package/dist/services/DoiService.js +206 -1
- package/dist/services/FigshareService.d.ts.map +1 -1
- package/dist/services/FigshareService.js +5 -1
- package/dist/services/FormVocabularyService.d.ts +45 -0
- package/dist/services/FormVocabularyService.d.ts.map +1 -0
- package/dist/services/FormVocabularyService.js +326 -0
- package/dist/services/I18nEntriesService.d.ts +3 -0
- package/dist/services/I18nEntriesService.d.ts.map +1 -1
- package/dist/services/I18nEntriesService.js +14 -2
- package/dist/services/NamedQueryService.d.ts +27 -9
- package/dist/services/NamedQueryService.d.ts.map +1 -1
- package/dist/services/NamedQueryService.js +223 -55
- package/dist/services/RDMPService.d.ts.map +1 -1
- package/dist/services/RDMPService.js +3 -2
- package/dist/services/RecordsService.d.ts +8 -2
- package/dist/services/RecordsService.d.ts.map +1 -1
- package/dist/services/RecordsService.js +64 -16
- package/dist/services/ReportsService.d.ts.map +1 -1
- package/dist/services/ReportsService.js +7 -1
- package/dist/services/StandardDatastreamService.d.ts +32 -5
- package/dist/services/StandardDatastreamService.d.ts.map +1 -1
- package/dist/services/StandardDatastreamService.js +490 -38
- package/dist/services/StorageManagerService.d.ts +12 -1
- package/dist/services/StorageManagerService.d.ts.map +1 -1
- package/dist/services/StorageManagerService.js +72 -7
- package/dist/services/index.d.ts +9 -3
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +17 -7
- package/dist/storage/GridFSDriver.d.ts +101 -0
- package/dist/storage/GridFSDriver.d.ts.map +1 -0
- package/dist/storage/GridFSDriver.js +291 -0
- package/dist/storage/TusStorageManagerDataStore.d.ts +49 -0
- package/dist/storage/TusStorageManagerDataStore.d.ts.map +1 -0
- package/dist/storage/TusStorageManagerDataStore.js +300 -0
- package/dist/utilities/RequestParamUtils.d.ts +3 -0
- package/dist/utilities/RequestParamUtils.d.ts.map +1 -0
- package/dist/utilities/RequestParamUtils.js +13 -0
- package/dist/visitor/construct.visitor.d.ts.map +1 -1
- package/dist/visitor/construct.visitor.js +6 -3
- package/dist/visitor/migrate-config-v4-v5.visitor.d.ts.map +1 -1
- package/dist/visitor/migrate-config-v4-v5.visitor.js +19 -1
- package/dist/visitor/validator.visitor.d.ts.map +1 -1
- package/dist/visitor/validator.visitor.js +11 -3
- package/dist/waterline-models/AttachmentAccessAudit.d.ts +26 -0
- package/dist/waterline-models/AttachmentAccessAudit.d.ts.map +1 -0
- package/dist/waterline-models/AttachmentAccessAudit.js +63 -0
- package/dist/waterline-models/AttachmentMetadata.d.ts +40 -0
- package/dist/waterline-models/AttachmentMetadata.d.ts.map +1 -0
- package/dist/waterline-models/AttachmentMetadata.js +147 -0
- package/dist/waterline-models/BrandingConfig.d.ts +0 -2
- package/dist/waterline-models/BrandingConfig.d.ts.map +1 -1
- package/dist/waterline-models/BrandingConfig.js +1 -6
- package/dist/waterline-models/DashboardType.d.ts +7 -0
- package/dist/waterline-models/DashboardType.d.ts.map +1 -1
- package/dist/waterline-models/DashboardType.js +16 -1
- package/dist/waterline-models/I18nTranslation.d.ts +2 -0
- package/dist/waterline-models/I18nTranslation.d.ts.map +1 -1
- package/dist/waterline-models/I18nTranslation.js +6 -1
- package/dist/waterline-models/NamedQuery.d.ts +6 -0
- package/dist/waterline-models/NamedQuery.d.ts.map +1 -1
- package/dist/waterline-models/NamedQuery.js +16 -1
- package/dist/waterline-models/index.d.ts +4 -0
- package/dist/waterline-models/index.d.ts.map +1 -1
- package/dist/waterline-models/index.js +7 -1
- package/package.json +36 -26
- package/dist/controllers/VocabController.d.ts +0 -43
- package/dist/controllers/VocabController.d.ts.map +0 -1
- package/dist/controllers/VocabController.js +0 -190
- package/dist/services/VocabService.d.ts +0 -81
- package/dist/services/VocabService.d.ts.map +0 -1
- package/dist/services/VocabService.js +0 -424
|
@@ -97,7 +97,7 @@ var Controllers;
|
|
|
97
97
|
'addRoleView',
|
|
98
98
|
'removeRoleView',
|
|
99
99
|
'harvest',
|
|
100
|
-
'legacyHarvest'
|
|
100
|
+
'legacyHarvest',
|
|
101
101
|
];
|
|
102
102
|
init() {
|
|
103
103
|
this.RecordsService = sails.services.recordsservice;
|
|
@@ -115,44 +115,109 @@ var Controllers;
|
|
|
115
115
|
**************************************** Add custom methods **************************************
|
|
116
116
|
**************************************************************************************************
|
|
117
117
|
*/
|
|
118
|
-
bootstrap() {
|
|
119
|
-
}
|
|
118
|
+
bootstrap() { }
|
|
120
119
|
asError(error) {
|
|
121
120
|
return error instanceof Error ? error : new Error(String(error));
|
|
122
121
|
}
|
|
122
|
+
shouldIncludeRelationships(req) {
|
|
123
|
+
const include = String(req.param('include') ?? req.query.include ?? '').trim().toLowerCase();
|
|
124
|
+
const includeRelationships = String(req.param('includeRelationships') ?? req.query.includeRelationships ?? '').trim().toLowerCase();
|
|
125
|
+
return include.split(',').includes('relationships') || includeRelationships === 'true';
|
|
126
|
+
}
|
|
127
|
+
parseRelationshipExpandOptions(req, defaultDepth = 1) {
|
|
128
|
+
const parseCsv = (value) => {
|
|
129
|
+
const normalized = String(value ?? '').trim();
|
|
130
|
+
if (!normalized) {
|
|
131
|
+
return undefined;
|
|
132
|
+
}
|
|
133
|
+
return normalized.split(',').map((item) => item.trim()).filter(Boolean);
|
|
134
|
+
};
|
|
135
|
+
const depthValue = req.param('relationshipDepth') ?? req.query.relationshipDepth;
|
|
136
|
+
const parsedDepth = Number(depthValue);
|
|
137
|
+
const fields = String(req.param('fields') ?? req.query.fields ?? '').trim().toLowerCase();
|
|
138
|
+
return {
|
|
139
|
+
depth: Number.isFinite(parsedDepth) && parsedDepth >= 0 ? parsedDepth : defaultDepth,
|
|
140
|
+
includeRelationIds: parseCsv(req.param('relationshipIds') ?? req.query.relationshipIds),
|
|
141
|
+
includeRecordTypes: parseCsv(req.param('recordTypes') ?? req.query.recordTypes),
|
|
142
|
+
fields: fields === 'summary' ? 'summary' : 'full',
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
hasViewAccess(brand, user, record) {
|
|
146
|
+
const currentUser = user ?? {};
|
|
147
|
+
const roles = (currentUser['roles'] ?? []);
|
|
148
|
+
return this.RecordsService.hasViewAccess(brand, currentUser, roles, record);
|
|
149
|
+
}
|
|
150
|
+
async filterRelationshipGraphByAccess(brand, user, graph) {
|
|
151
|
+
const filteredRelatedObjects = {};
|
|
152
|
+
const allowedTargetOids = new Set();
|
|
153
|
+
const omittedByAccess = { ...(graph.omittedByAccess ?? {}) };
|
|
154
|
+
for (const [recordType, records] of Object.entries(graph.relatedObjects ?? {})) {
|
|
155
|
+
const keptRecords = [];
|
|
156
|
+
for (const recordValue of (records ?? [])) {
|
|
157
|
+
const record = (recordValue ?? {});
|
|
158
|
+
const recordOid = String(record.redboxOid ?? '').trim();
|
|
159
|
+
if (!recordOid) {
|
|
160
|
+
continue;
|
|
161
|
+
}
|
|
162
|
+
const hasAccess = recordOid === graph.rootOid || await this.hasViewAccess(brand, user, record);
|
|
163
|
+
if (hasAccess) {
|
|
164
|
+
allowedTargetOids.add(recordOid);
|
|
165
|
+
keptRecords.push(record);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
if (keptRecords.length > 0) {
|
|
169
|
+
filteredRelatedObjects[recordType] = keptRecords;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
const filteredEdges = (graph.edges ?? []).filter((edge) => {
|
|
173
|
+
if (allowedTargetOids.has(edge.targetOid) || edge.targetOid === graph.rootOid) {
|
|
174
|
+
return true;
|
|
175
|
+
}
|
|
176
|
+
omittedByAccess[edge.relationId] = Number(omittedByAccess[edge.relationId] ?? 0) + 1;
|
|
177
|
+
return false;
|
|
178
|
+
});
|
|
179
|
+
return {
|
|
180
|
+
rootOid: graph.rootOid,
|
|
181
|
+
edges: filteredEdges,
|
|
182
|
+
relatedObjects: filteredRelatedObjects,
|
|
183
|
+
omittedByAccess,
|
|
184
|
+
};
|
|
185
|
+
}
|
|
123
186
|
async getPermissions(req, res) {
|
|
124
|
-
const
|
|
187
|
+
const validated = (0, index_1.getValidatedApiRequest)(req);
|
|
188
|
+
const oid = validated.params.oid;
|
|
125
189
|
try {
|
|
126
190
|
const record = await this.RecordsService.getMeta(oid);
|
|
127
|
-
return this.sendResp(req, res, { data: record[
|
|
191
|
+
return this.sendResp(req, res, { data: record['authorization'] });
|
|
128
192
|
}
|
|
129
193
|
catch (err) {
|
|
130
194
|
return this.sendResp(req, res, {
|
|
131
195
|
errors: [this.asError(err)],
|
|
132
|
-
displayErrors: [{ detail: 'Failed to get record permission.' }]
|
|
196
|
+
displayErrors: [{ detail: 'Failed to get record permission.' }],
|
|
133
197
|
});
|
|
134
198
|
}
|
|
135
199
|
}
|
|
136
200
|
async addUserEdit(req, res) {
|
|
137
201
|
const brand = BrandingService.getBrand(req.session.branding);
|
|
138
|
-
const
|
|
139
|
-
const
|
|
140
|
-
const
|
|
141
|
-
const
|
|
202
|
+
const validated = (0, index_1.getValidatedApiRequest)(req);
|
|
203
|
+
const oid = validated.params.oid;
|
|
204
|
+
const body = validated.body;
|
|
205
|
+
const users = body['users'];
|
|
206
|
+
const pendingUsers = body['pendingUsers'];
|
|
142
207
|
let record;
|
|
143
208
|
try {
|
|
144
209
|
record = await this.RecordsService.getMeta(oid);
|
|
145
210
|
if (users != null && users.length > 0) {
|
|
146
|
-
record.authorization.edit = _.union(record[
|
|
211
|
+
record.authorization.edit = _.union(record['authorization']['edit'], users);
|
|
147
212
|
}
|
|
148
213
|
if (pendingUsers != null && pendingUsers.length > 0) {
|
|
149
|
-
record.authorization.editPending = _.union(record[
|
|
214
|
+
record.authorization.editPending = _.union(record['authorization']['editPending'], pendingUsers);
|
|
150
215
|
}
|
|
151
216
|
}
|
|
152
217
|
catch (err) {
|
|
153
218
|
return this.sendResp(req, res, {
|
|
154
219
|
errors: [this.asError(err)],
|
|
155
|
-
displayErrors: [{ detail: 'Failed to modify record meta for adding an editor.' }]
|
|
220
|
+
displayErrors: [{ detail: 'Failed to modify record meta for adding an editor.' }],
|
|
156
221
|
});
|
|
157
222
|
}
|
|
158
223
|
try {
|
|
@@ -160,39 +225,40 @@ var Controllers;
|
|
|
160
225
|
if (!result.isSuccessful()) {
|
|
161
226
|
return this.sendResp(req, res, {
|
|
162
227
|
status: 500,
|
|
163
|
-
displayErrors: [{ detail: `Failed to update record with oid ${oid}.` }]
|
|
228
|
+
displayErrors: [{ detail: `Failed to update record with oid ${oid}.` }],
|
|
164
229
|
});
|
|
165
230
|
}
|
|
166
231
|
const recordResult = await this.RecordsService.getMeta(result.oid);
|
|
167
|
-
return this.sendResp(req, res, { data: recordResult[
|
|
232
|
+
return this.sendResp(req, res, { data: recordResult['authorization'] });
|
|
168
233
|
}
|
|
169
234
|
catch (err) {
|
|
170
235
|
return this.sendResp(req, res, {
|
|
171
236
|
errors: [this.asError(err)],
|
|
172
|
-
displayErrors: [{ detail: 'Failed adding an editor.' }]
|
|
237
|
+
displayErrors: [{ detail: 'Failed adding an editor.' }],
|
|
173
238
|
});
|
|
174
239
|
}
|
|
175
240
|
}
|
|
176
241
|
async addUserView(req, res) {
|
|
177
242
|
const brand = BrandingService.getBrand(req.session.branding);
|
|
178
|
-
const
|
|
179
|
-
const
|
|
180
|
-
const
|
|
181
|
-
const
|
|
243
|
+
const validated = (0, index_1.getValidatedApiRequest)(req);
|
|
244
|
+
const oid = validated.params.oid;
|
|
245
|
+
const body = validated.body;
|
|
246
|
+
const users = body['users'];
|
|
247
|
+
const pendingUsers = body['pendingUsers'];
|
|
182
248
|
let record;
|
|
183
249
|
try {
|
|
184
250
|
record = await this.RecordsService.getMeta(oid);
|
|
185
251
|
if (users != null && users.length > 0) {
|
|
186
|
-
record[
|
|
252
|
+
record['authorization']['view'] = _.union(record['authorization']['view'], users);
|
|
187
253
|
}
|
|
188
254
|
if (pendingUsers != null && pendingUsers.length > 0) {
|
|
189
|
-
record[
|
|
255
|
+
record['authorization']['viewPending'] = _.union(record['authorization']['viewPending'], pendingUsers);
|
|
190
256
|
}
|
|
191
257
|
}
|
|
192
258
|
catch (err) {
|
|
193
259
|
return this.sendResp(req, res, {
|
|
194
260
|
errors: [this.asError(err)],
|
|
195
|
-
displayErrors: [{ detail: 'Failed getting record meta for adding a viewer.' }]
|
|
261
|
+
displayErrors: [{ detail: 'Failed getting record meta for adding a viewer.' }],
|
|
196
262
|
});
|
|
197
263
|
}
|
|
198
264
|
try {
|
|
@@ -200,39 +266,40 @@ var Controllers;
|
|
|
200
266
|
if (!result.isSuccessful()) {
|
|
201
267
|
return this.sendResp(req, res, {
|
|
202
268
|
status: 500,
|
|
203
|
-
displayErrors: [{ detail: `Failed to update record with oid ${oid}.` }]
|
|
269
|
+
displayErrors: [{ detail: `Failed to update record with oid ${oid}.` }],
|
|
204
270
|
});
|
|
205
271
|
}
|
|
206
|
-
const resultRecord = await this.RecordsService.getMeta(result[
|
|
207
|
-
return this.sendResp(req, res, { data: resultRecord[
|
|
272
|
+
const resultRecord = await this.RecordsService.getMeta(result['oid']);
|
|
273
|
+
return this.sendResp(req, res, { data: resultRecord['authorization'] });
|
|
208
274
|
}
|
|
209
275
|
catch (err) {
|
|
210
276
|
return this.sendResp(req, res, {
|
|
211
277
|
errors: [this.asError(err)],
|
|
212
|
-
displayErrors: [{ detail: 'Failed adding a viewer.' }]
|
|
278
|
+
displayErrors: [{ detail: 'Failed adding a viewer.' }],
|
|
213
279
|
});
|
|
214
280
|
}
|
|
215
281
|
}
|
|
216
282
|
async removeUserEdit(req, res) {
|
|
217
283
|
const brand = BrandingService.getBrand(req.session.branding);
|
|
218
|
-
const
|
|
219
|
-
const
|
|
220
|
-
const
|
|
221
|
-
const
|
|
284
|
+
const validated = (0, index_1.getValidatedApiRequest)(req);
|
|
285
|
+
const oid = validated.params.oid;
|
|
286
|
+
const body = validated.body;
|
|
287
|
+
const users = body['users'];
|
|
288
|
+
const pendingUsers = body['pendingUsers'];
|
|
222
289
|
let record;
|
|
223
290
|
try {
|
|
224
291
|
record = await this.RecordsService.getMeta(oid);
|
|
225
292
|
if (users != null && users.length > 0) {
|
|
226
|
-
record[
|
|
293
|
+
record['authorization']['edit'] = _.difference(record['authorization']['edit'], users);
|
|
227
294
|
}
|
|
228
295
|
if (pendingUsers != null && pendingUsers.length > 0) {
|
|
229
|
-
record[
|
|
296
|
+
record['authorization']['editPending'] = _.difference(record['authorization']['editPending'], pendingUsers);
|
|
230
297
|
}
|
|
231
298
|
}
|
|
232
299
|
catch (err) {
|
|
233
300
|
return this.sendResp(req, res, {
|
|
234
301
|
errors: [this.asError(err)],
|
|
235
|
-
displayErrors: [{ detail: 'Failed getting record meta for removing an editor.' }]
|
|
302
|
+
displayErrors: [{ detail: 'Failed getting record meta for removing an editor.' }],
|
|
236
303
|
});
|
|
237
304
|
}
|
|
238
305
|
try {
|
|
@@ -240,39 +307,40 @@ var Controllers;
|
|
|
240
307
|
if (!result.isSuccessful()) {
|
|
241
308
|
return this.sendResp(req, res, {
|
|
242
309
|
status: 500,
|
|
243
|
-
displayErrors: [{ detail: `Failed to update record with oid ${oid}.` }]
|
|
310
|
+
displayErrors: [{ detail: `Failed to update record with oid ${oid}.` }],
|
|
244
311
|
});
|
|
245
312
|
}
|
|
246
|
-
const resultRecord = await this.RecordsService.getMeta(result[
|
|
247
|
-
return this.sendResp(req, res, { data: resultRecord[
|
|
313
|
+
const resultRecord = await this.RecordsService.getMeta(result['oid']);
|
|
314
|
+
return this.sendResp(req, res, { data: resultRecord['authorization'] });
|
|
248
315
|
}
|
|
249
316
|
catch (err) {
|
|
250
317
|
return this.sendResp(req, res, {
|
|
251
318
|
errors: [this.asError(err)],
|
|
252
|
-
displayErrors: [{ detail: 'Failed removing an editor.' }]
|
|
319
|
+
displayErrors: [{ detail: 'Failed removing an editor.' }],
|
|
253
320
|
});
|
|
254
321
|
}
|
|
255
322
|
}
|
|
256
323
|
async removeUserView(req, res) {
|
|
257
324
|
const brand = BrandingService.getBrand(req.session.branding);
|
|
258
|
-
const
|
|
259
|
-
const
|
|
260
|
-
const
|
|
261
|
-
const
|
|
325
|
+
const validated = (0, index_1.getValidatedApiRequest)(req);
|
|
326
|
+
const oid = validated.params.oid;
|
|
327
|
+
const body = validated.body;
|
|
328
|
+
const users = body['users'];
|
|
329
|
+
const pendingUsers = body['pendingUsers'];
|
|
262
330
|
let record;
|
|
263
331
|
try {
|
|
264
332
|
record = await this.RecordsService.getMeta(oid);
|
|
265
333
|
if (users != null && users.length > 0) {
|
|
266
|
-
record[
|
|
334
|
+
record['authorization']['view'] = _.difference(record['authorization']['view'], users);
|
|
267
335
|
}
|
|
268
336
|
if (pendingUsers != null && pendingUsers.length > 0) {
|
|
269
|
-
record[
|
|
337
|
+
record['authorization']['viewPending'] = _.difference(record['authorization']['viewPending'], pendingUsers);
|
|
270
338
|
}
|
|
271
339
|
}
|
|
272
340
|
catch (err) {
|
|
273
341
|
return this.sendResp(req, res, {
|
|
274
342
|
errors: [this.asError(err)],
|
|
275
|
-
displayErrors: [{ detail: 'Failed to modify record meta for removing a viewer.' }]
|
|
343
|
+
displayErrors: [{ detail: 'Failed to modify record meta for removing a viewer.' }],
|
|
276
344
|
});
|
|
277
345
|
}
|
|
278
346
|
try {
|
|
@@ -280,42 +348,55 @@ var Controllers;
|
|
|
280
348
|
if (!result.isSuccessful()) {
|
|
281
349
|
return this.sendResp(req, res, {
|
|
282
350
|
status: 500,
|
|
283
|
-
displayErrors: [{ detail: `Failed to update record with oid ${oid}.` }]
|
|
351
|
+
displayErrors: [{ detail: `Failed to update record with oid ${oid}.` }],
|
|
284
352
|
});
|
|
285
353
|
}
|
|
286
|
-
const resultRecord = await this.RecordsService.getMeta(result[
|
|
287
|
-
return this.sendResp(req, res, { data: resultRecord[
|
|
354
|
+
const resultRecord = await this.RecordsService.getMeta(result['oid']);
|
|
355
|
+
return this.sendResp(req, res, { data: resultRecord['authorization'] });
|
|
288
356
|
}
|
|
289
357
|
catch (err) {
|
|
290
358
|
return this.sendResp(req, res, {
|
|
291
359
|
errors: [this.asError(err)],
|
|
292
|
-
displayErrors: [{ detail: 'Failed removing a viewer.' }]
|
|
360
|
+
displayErrors: [{ detail: 'Failed removing a viewer.' }],
|
|
293
361
|
});
|
|
294
362
|
}
|
|
295
363
|
}
|
|
296
364
|
async getMeta(req, res) {
|
|
297
|
-
const
|
|
365
|
+
const validated = (0, index_1.getValidatedApiRequest)(req);
|
|
366
|
+
const oid = validated.params.oid;
|
|
367
|
+
const brand = BrandingService.getBrand(req.session.branding);
|
|
298
368
|
try {
|
|
299
369
|
const record = await this.RecordsService.getMeta(oid);
|
|
300
370
|
if (_.isEmpty(record)) {
|
|
301
371
|
return this.sendResp(req, res, {
|
|
302
372
|
status: 400,
|
|
303
|
-
displayErrors: [{ detail: `Failed to get meta, cannot find existing record with oid: ${oid}` }]
|
|
373
|
+
displayErrors: [{ detail: `Failed to get meta, cannot find existing record with oid: ${oid}` }],
|
|
304
374
|
});
|
|
305
375
|
}
|
|
306
|
-
|
|
376
|
+
if (!this.shouldIncludeRelationships(req)) {
|
|
377
|
+
return this.sendResp(req, res, { data: record["metadata"] });
|
|
378
|
+
}
|
|
379
|
+
const relationships = await this.RecordsService.getRelatedRecords(oid, brand, this.parseRelationshipExpandOptions(req, 1));
|
|
380
|
+
const filteredRelationships = await this.filterRelationshipGraphByAccess(brand, req.user ?? {}, relationships);
|
|
381
|
+
return this.sendResp(req, res, {
|
|
382
|
+
data: {
|
|
383
|
+
metadata: record["metadata"],
|
|
384
|
+
relationships: filteredRelationships,
|
|
385
|
+
}
|
|
386
|
+
});
|
|
307
387
|
}
|
|
308
388
|
catch (err) {
|
|
309
389
|
return this.sendResp(req, res, {
|
|
310
390
|
errors: [this.asError(err)],
|
|
311
|
-
displayErrors: [{ detail:
|
|
391
|
+
displayErrors: [{ detail: 'Get Metadata failed.' }],
|
|
312
392
|
});
|
|
313
393
|
}
|
|
314
394
|
}
|
|
315
395
|
async getRecordAudit(req, res) {
|
|
316
|
-
const
|
|
317
|
-
const
|
|
318
|
-
const
|
|
396
|
+
const validated = (0, index_1.getValidatedApiRequest)(req);
|
|
397
|
+
const oid = validated.params.oid;
|
|
398
|
+
const dateFrom = validated.query.dateFrom;
|
|
399
|
+
const dateTo = validated.query.dateTo;
|
|
319
400
|
const params = { oid, dateFrom: null, dateTo: null };
|
|
320
401
|
if (!_.isEmpty(dateFrom)) {
|
|
321
402
|
params['dateFrom'] = new Date(dateFrom);
|
|
@@ -334,7 +415,7 @@ var Controllers;
|
|
|
334
415
|
catch (err) {
|
|
335
416
|
return this.sendResp(req, res, {
|
|
336
417
|
errors: [this.asError(err)],
|
|
337
|
-
displayErrors: [{ detail: `Failed to list audit records for ${oid}, please.` }]
|
|
418
|
+
displayErrors: [{ detail: `Failed to list audit records for ${oid}, please.` }],
|
|
338
419
|
});
|
|
339
420
|
}
|
|
340
421
|
}
|
|
@@ -342,35 +423,40 @@ var Controllers;
|
|
|
342
423
|
const brand = BrandingService.getBrand(req.session.branding);
|
|
343
424
|
sails.log.debug('brand is...');
|
|
344
425
|
sails.log.debug(brand);
|
|
345
|
-
const
|
|
426
|
+
const validated = (0, index_1.getValidatedApiRequest)(req);
|
|
427
|
+
const oid = validated.params.oid;
|
|
346
428
|
try {
|
|
347
429
|
const record = await this.RecordsService.getMeta(oid);
|
|
348
|
-
return this.sendResp(req, res, { data: record[
|
|
430
|
+
return this.sendResp(req, res, { data: record['metaMetadata'] });
|
|
349
431
|
}
|
|
350
432
|
catch (err) {
|
|
351
433
|
return this.sendResp(req, res, {
|
|
352
434
|
errors: [this.asError(err)],
|
|
353
|
-
displayErrors: [{ detail: `Failed to get object meta for ${oid}, please.`, meta: { oid } }]
|
|
435
|
+
displayErrors: [{ detail: `Failed to get object meta for ${oid}, please.`, meta: { oid } }],
|
|
354
436
|
});
|
|
355
437
|
}
|
|
356
438
|
}
|
|
357
439
|
async updateMeta(req, res) {
|
|
358
440
|
const brand = BrandingService.getBrand(req.session.branding);
|
|
359
|
-
const
|
|
360
|
-
const
|
|
361
|
-
const
|
|
441
|
+
const validated = (0, index_1.getValidatedApiRequest)(req);
|
|
442
|
+
const oid = validated.params.oid;
|
|
443
|
+
const body = validated.body;
|
|
444
|
+
const shouldMerge = validated.query.merge === true;
|
|
445
|
+
const shouldProcessDatastreams = validated.query.datastreams === true;
|
|
362
446
|
let record;
|
|
363
447
|
try {
|
|
364
448
|
record = await this.RecordsService.getMeta(oid);
|
|
365
449
|
if (_.isEmpty(record)) {
|
|
366
450
|
return this.sendResp(req, res, {
|
|
367
451
|
status: 400,
|
|
368
|
-
displayErrors: [
|
|
452
|
+
displayErrors: [
|
|
453
|
+
{ detail: `Failed to update meta, cannot find existing record with oid: ${oid}.`, meta: { oid } },
|
|
454
|
+
],
|
|
369
455
|
});
|
|
370
456
|
}
|
|
371
457
|
if (shouldMerge) {
|
|
372
458
|
// behavior modified from replacing arrays to appending to arrays:
|
|
373
|
-
record[
|
|
459
|
+
record['metadata'] = _.mergeWith(record.metadata, body, (objValue, srcValue) => {
|
|
374
460
|
if (_.isArray(objValue)) {
|
|
375
461
|
return objValue.concat(srcValue);
|
|
376
462
|
}
|
|
@@ -378,13 +464,13 @@ var Controllers;
|
|
|
378
464
|
});
|
|
379
465
|
}
|
|
380
466
|
else {
|
|
381
|
-
record[
|
|
467
|
+
record['metadata'] = body;
|
|
382
468
|
}
|
|
383
469
|
}
|
|
384
470
|
catch (err) {
|
|
385
471
|
return this.sendResp(req, res, {
|
|
386
472
|
errors: [this.asError(err)],
|
|
387
|
-
displayErrors: [{ detail:
|
|
473
|
+
displayErrors: [{ detail: 'Update Metadata failed.' }],
|
|
388
474
|
});
|
|
389
475
|
}
|
|
390
476
|
try {
|
|
@@ -407,46 +493,50 @@ var Controllers;
|
|
|
407
493
|
catch (err) {
|
|
408
494
|
return this.sendResp(req, res, {
|
|
409
495
|
errors: [this.asError(err)],
|
|
410
|
-
displayErrors: [{ detail:
|
|
496
|
+
displayErrors: [{ detail: 'Update Metadata failed' }],
|
|
411
497
|
});
|
|
412
498
|
}
|
|
413
499
|
}
|
|
414
500
|
async updateObjectMeta(req, res) {
|
|
415
501
|
const brand = BrandingService.getBrand(req.session.branding);
|
|
416
|
-
const
|
|
502
|
+
const validated = (0, index_1.getValidatedApiRequest)(req);
|
|
503
|
+
const oid = validated.params.oid;
|
|
504
|
+
const body = validated.body;
|
|
417
505
|
let record;
|
|
418
506
|
try {
|
|
419
507
|
record = await this.RecordsService.getMeta(oid);
|
|
420
|
-
record[
|
|
508
|
+
record['metaMetadata'] = body;
|
|
421
509
|
}
|
|
422
510
|
catch (err) {
|
|
423
|
-
return this.sendResp(req, res, { errors: [this.asError(err)], displayErrors: [{ detail:
|
|
511
|
+
return this.sendResp(req, res, { errors: [this.asError(err)], displayErrors: [{ detail: 'Updated' }] });
|
|
424
512
|
}
|
|
425
513
|
try {
|
|
426
514
|
const result = await this.RecordsService.updateMeta(brand, oid, record, req.user ?? {});
|
|
427
515
|
return this.sendResp(req, res, { data: result });
|
|
428
516
|
}
|
|
429
517
|
catch (err) {
|
|
430
|
-
return this.sendResp(req, res, { errors: [this.asError(err)], displayErrors: [{ detail:
|
|
518
|
+
return this.sendResp(req, res, { errors: [this.asError(err)], displayErrors: [{ detail: 'Updated' }] });
|
|
431
519
|
}
|
|
432
520
|
}
|
|
433
521
|
create(req, res) {
|
|
434
522
|
const brand = BrandingService.getBrand(req.session.branding);
|
|
435
|
-
const
|
|
523
|
+
const validated = (0, index_1.getValidatedApiRequest)(req);
|
|
524
|
+
const recordType = validated.params.recordType;
|
|
436
525
|
const user = req.user ?? {};
|
|
437
|
-
const body =
|
|
526
|
+
const body = validated.body;
|
|
438
527
|
const that = this;
|
|
439
528
|
if (body != null) {
|
|
440
529
|
let authorizationEdit, authorizationView, authorizationEditPending, authorizationViewPending;
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
530
|
+
const authorizationBody = body['authorization'];
|
|
531
|
+
if (authorizationBody != null) {
|
|
532
|
+
authorizationEdit = authorizationBody['edit'];
|
|
533
|
+
authorizationView = authorizationBody['view'];
|
|
534
|
+
authorizationEditPending = authorizationBody['editPending'];
|
|
535
|
+
authorizationViewPending = authorizationBody['viewPending'];
|
|
446
536
|
}
|
|
447
537
|
else {
|
|
448
538
|
// If no authorization block set to user
|
|
449
|
-
body[
|
|
539
|
+
body['authorization'] = [];
|
|
450
540
|
authorizationEdit = [];
|
|
451
541
|
authorizationView = [];
|
|
452
542
|
authorizationEdit.push((req.user ?? {}).username);
|
|
@@ -456,25 +546,25 @@ var Controllers;
|
|
|
456
546
|
edit: authorizationEdit,
|
|
457
547
|
view: authorizationView,
|
|
458
548
|
editPending: authorizationEditPending,
|
|
459
|
-
viewPending: authorizationViewPending
|
|
549
|
+
viewPending: authorizationViewPending,
|
|
460
550
|
};
|
|
461
551
|
const recordTypeObservable = RecordTypesService.get(brand, recordType);
|
|
462
552
|
recordTypeObservable.subscribe((recordTypeModel) => {
|
|
463
553
|
if (recordTypeModel) {
|
|
464
|
-
const metadata = body[
|
|
465
|
-
const workflowStage = body[
|
|
554
|
+
const metadata = body['metadata'];
|
|
555
|
+
const workflowStage = body['workflowStage'];
|
|
466
556
|
const request = {};
|
|
467
557
|
//if no metadata field, no authorization
|
|
468
558
|
if (metadata == null) {
|
|
469
|
-
request[
|
|
559
|
+
request['metadata'] = body;
|
|
470
560
|
}
|
|
471
561
|
else {
|
|
472
|
-
request[
|
|
562
|
+
request['metadata'] = metadata;
|
|
473
563
|
}
|
|
474
|
-
request[
|
|
564
|
+
request['authorization'] = authorization;
|
|
475
565
|
const createPromise = this.RecordsService.create(brand, request, recordTypeModel, user);
|
|
476
566
|
const obs = (0, rxjs_1.from)(createPromise);
|
|
477
|
-
obs.subscribe(
|
|
567
|
+
obs.subscribe(response => {
|
|
478
568
|
if (response.isSuccessful()) {
|
|
479
569
|
if (workflowStage) {
|
|
480
570
|
WorkflowStepsService.get(recordTypeModel, workflowStage).subscribe(wfStep => {
|
|
@@ -485,35 +575,40 @@ var Controllers;
|
|
|
485
575
|
status: 201,
|
|
486
576
|
data: response,
|
|
487
577
|
headers: {
|
|
488
|
-
|
|
489
|
-
|
|
578
|
+
Location: sails.config.appUrl +
|
|
579
|
+
BrandingService.getBrandAndPortalPath(req) +
|
|
580
|
+
'/api/records/metadata/' +
|
|
581
|
+
response.oid,
|
|
582
|
+
},
|
|
490
583
|
});
|
|
491
584
|
}
|
|
492
585
|
else {
|
|
493
586
|
return this.sendResp(req, res, {
|
|
494
587
|
status: 500,
|
|
495
|
-
displayErrors: [{ detail:
|
|
588
|
+
displayErrors: [{ detail: 'Create Record failed' }],
|
|
496
589
|
});
|
|
497
590
|
}
|
|
498
591
|
}, (error) => {
|
|
499
592
|
return this.sendResp(req, res, {
|
|
500
593
|
errors: [this.asError(error)],
|
|
501
|
-
displayErrors: [{ detail:
|
|
594
|
+
displayErrors: [{ detail: 'Create Record failed' }],
|
|
502
595
|
});
|
|
503
596
|
});
|
|
504
597
|
return;
|
|
505
598
|
}
|
|
506
599
|
else {
|
|
507
600
|
return this.sendResp(req, res, {
|
|
508
|
-
status: 400,
|
|
601
|
+
status: 400,
|
|
602
|
+
displayErrors: [{ detail: 'Record Type provided is not valid' }],
|
|
509
603
|
});
|
|
510
604
|
}
|
|
511
605
|
});
|
|
512
606
|
}
|
|
513
607
|
}
|
|
514
608
|
async getDataStream(req, res) {
|
|
515
|
-
const
|
|
516
|
-
const
|
|
609
|
+
const validated = (0, index_1.getValidatedApiRequest)(req);
|
|
610
|
+
const oid = validated.params.oid;
|
|
611
|
+
const datastreamId = validated.params.datastreamId;
|
|
517
612
|
sails.log.debug(`getDataStream ${oid} ${datastreamId}`);
|
|
518
613
|
try {
|
|
519
614
|
let found = null;
|
|
@@ -531,17 +626,17 @@ var Controllers;
|
|
|
531
626
|
// Set octet stream as a default
|
|
532
627
|
mimeType = 'application/octet-stream';
|
|
533
628
|
}
|
|
534
|
-
const fileName =
|
|
629
|
+
const fileName = validated.query.fileName ? String(validated.query.fileName) : found.name ? found.name : datastreamId;
|
|
535
630
|
res.set('Content-Type', 'application/octet-stream');
|
|
536
631
|
const size = found.size;
|
|
537
632
|
if (!_.isEmpty(size)) {
|
|
538
633
|
res.set('Content-Length', size);
|
|
539
634
|
}
|
|
540
|
-
sails.log.verbose(
|
|
635
|
+
sails.log.verbose('fileName ' + fileName);
|
|
541
636
|
res.attachment(fileName);
|
|
542
637
|
sails.log.info(`Returning datastream observable of ${oid}: ${fileName}, datastreamId: ${datastreamId}`);
|
|
543
638
|
try {
|
|
544
|
-
const response = await this.DatastreamService.getDatastream(oid, datastreamId);
|
|
639
|
+
const response = await this.DatastreamService.getDatastream(oid, datastreamId, { username: String(req.user?.username ?? '') || undefined });
|
|
545
640
|
if (response.readstream) {
|
|
546
641
|
response.readstream.on('error', (error) => {
|
|
547
642
|
// Handle the error here
|
|
@@ -560,28 +655,35 @@ var Controllers;
|
|
|
560
655
|
catch (error) {
|
|
561
656
|
return this.sendResp(req, res, {
|
|
562
657
|
errors: [this.asError(error)],
|
|
563
|
-
displayErrors: [{ detail: 'There was a problem with the upstream request.' }]
|
|
658
|
+
displayErrors: [{ detail: 'There was a problem with the upstream request.' }],
|
|
564
659
|
});
|
|
565
660
|
}
|
|
566
661
|
}
|
|
567
662
|
catch (error) {
|
|
568
663
|
return this.sendResp(req, res, {
|
|
569
664
|
errors: [this.asError(error)],
|
|
570
|
-
displayErrors: [{ detail: 'There was a problem with the upstream request.' }]
|
|
665
|
+
displayErrors: [{ detail: 'There was a problem with the upstream request.' }],
|
|
571
666
|
});
|
|
572
667
|
}
|
|
573
668
|
}
|
|
574
669
|
async addDataStreams(req, res) {
|
|
575
|
-
const
|
|
670
|
+
const validated = (0, index_1.getValidatedApiRequest)(req);
|
|
671
|
+
const oid = validated.params.oid;
|
|
576
672
|
const self = this;
|
|
577
673
|
const attachmentsDir = sails.config.record.attachments.file?.directory ?? sails.config.record.attachments.stageDir;
|
|
578
674
|
if (!attachmentsDir) {
|
|
579
675
|
return this.sendResp(req, res, {
|
|
580
676
|
status: 500,
|
|
581
|
-
displayErrors: [
|
|
677
|
+
displayErrors: [
|
|
678
|
+
{
|
|
679
|
+
detail: 'Attachment directory is required: configure record.attachments.file.directory or record.attachments.stageDir.',
|
|
680
|
+
},
|
|
681
|
+
],
|
|
582
682
|
});
|
|
583
683
|
}
|
|
584
|
-
req
|
|
684
|
+
req
|
|
685
|
+
.file('attachmentFields')
|
|
686
|
+
.upload({
|
|
585
687
|
dirname: `${attachmentsDir}`,
|
|
586
688
|
maxBytes: 104857600,
|
|
587
689
|
saveAs: function (__newFileStream, next) {
|
|
@@ -595,18 +697,40 @@ var Controllers;
|
|
|
595
697
|
sails.log.error(error);
|
|
596
698
|
return next(new Error(`Could not determine an appropriate filename for uploaded filestream(s) for oid ${oid}.`));
|
|
597
699
|
}
|
|
598
|
-
}
|
|
700
|
+
},
|
|
599
701
|
}, async function (error, UploadedFileMetadata) {
|
|
600
702
|
if (error) {
|
|
601
703
|
return self.sendResp(req, res, {
|
|
602
704
|
errors: [self.asError(error)],
|
|
603
|
-
displayErrors: [{ detail: `There was a problem adding datastream(s) to: ${attachmentsDir}` }]
|
|
705
|
+
displayErrors: [{ detail: `There was a problem adding datastream(s) to: ${attachmentsDir}` }],
|
|
706
|
+
headers: self.getNoCacheHeaders(),
|
|
604
707
|
});
|
|
605
708
|
}
|
|
709
|
+
const uploadedFiles = Array.isArray(UploadedFileMetadata) ? UploadedFileMetadata : [];
|
|
710
|
+
const fileValidation = (0, index_1.validateApiRouteFiles)(index_1.addDataStreamsRoute, {
|
|
711
|
+
attachmentFields: uploadedFiles,
|
|
712
|
+
});
|
|
713
|
+
if (!fileValidation.valid) {
|
|
714
|
+
return self.sendResp(req, res, {
|
|
715
|
+
status: 400,
|
|
716
|
+
displayErrors: fileValidation.issues.map(i => ({ title: i.path, detail: i.message })),
|
|
717
|
+
headers: self.getNoCacheHeaders(),
|
|
718
|
+
});
|
|
719
|
+
}
|
|
720
|
+
const validated = (0, index_1.getValidatedApiRequest)(req);
|
|
721
|
+
req.apiRequest = {
|
|
722
|
+
...validated,
|
|
723
|
+
files: { attachmentFields: uploadedFiles },
|
|
724
|
+
};
|
|
606
725
|
sails.log.verbose(UploadedFileMetadata);
|
|
607
726
|
sails.log.verbose('Succesfully uploaded all file metadata. Sending locations downstream....');
|
|
608
727
|
const fileIds = UploadedFileMetadata.map(function (nextDescriptor) {
|
|
609
|
-
return new index_1.Datastream({
|
|
728
|
+
return new index_1.Datastream({
|
|
729
|
+
fileId: path.relative(attachmentsDir, nextDescriptor.fd),
|
|
730
|
+
name: nextDescriptor.filename,
|
|
731
|
+
mimeType: nextDescriptor.type,
|
|
732
|
+
size: nextDescriptor.size,
|
|
733
|
+
});
|
|
610
734
|
});
|
|
611
735
|
sails.log.verbose('files to send upstream are:');
|
|
612
736
|
sails.log.verbose(_.toString(fileIds));
|
|
@@ -615,20 +739,23 @@ var Controllers;
|
|
|
615
739
|
const result = await self.DatastreamService.addDatastreams(oid, fileIds);
|
|
616
740
|
sails.log.verbose(`Done with updating streams and returning response...`);
|
|
617
741
|
if (result.isSuccessful()) {
|
|
618
|
-
sails.log.verbose(
|
|
742
|
+
sails.log.verbose('Presuming success...');
|
|
619
743
|
_.merge(result, { fileIds: fileIds });
|
|
620
744
|
return self.sendResp(req, res, { data: { message: result } });
|
|
621
745
|
}
|
|
622
746
|
else {
|
|
623
747
|
return self.sendResp(req, res, {
|
|
624
|
-
status: 500,
|
|
748
|
+
status: 500,
|
|
749
|
+
displayErrors: [{ detail: defaultErrorMessage + ' ' + result.message }],
|
|
750
|
+
headers: self.getNoCacheHeaders(),
|
|
625
751
|
});
|
|
626
752
|
}
|
|
627
753
|
}
|
|
628
754
|
catch (error) {
|
|
629
755
|
return self.sendResp(req, res, {
|
|
630
756
|
errors: [self.asError(error)],
|
|
631
|
-
displayErrors: [{ detail: defaultErrorMessage }]
|
|
757
|
+
displayErrors: [{ detail: defaultErrorMessage }],
|
|
758
|
+
headers: self.getNoCacheHeaders(),
|
|
632
759
|
});
|
|
633
760
|
}
|
|
634
761
|
});
|
|
@@ -639,12 +766,12 @@ var Controllers;
|
|
|
639
766
|
**************************************************************************************************
|
|
640
767
|
*/
|
|
641
768
|
/* Ad-hoc methods for listing records via api
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
769
|
+
* Using DashboardService for getRecords similar (copied from
|
|
770
|
+
* DashboardController) to DashboardService
|
|
771
|
+
* Can be used for building reports or SPAs for redbox
|
|
772
|
+
* TODO: Refactor DashboardController to use this and move DashboardService.getRecords
|
|
773
|
+
* to RecordsService
|
|
774
|
+
*/
|
|
648
775
|
getDocMetadata(doc) {
|
|
649
776
|
const metadata = {};
|
|
650
777
|
for (const key in doc) {
|
|
@@ -677,22 +804,22 @@ var Controllers;
|
|
|
677
804
|
const totalItems = results.totalItems;
|
|
678
805
|
const startIndex = start;
|
|
679
806
|
const noItems = rows;
|
|
680
|
-
const pageNumber = Math.floor(
|
|
807
|
+
const pageNumber = Math.floor(startIndex / noItems + 1);
|
|
681
808
|
apiReponse.summary.numFound = totalItems;
|
|
682
809
|
apiReponse.summary.start = startIndex;
|
|
683
810
|
apiReponse.summary.page = pageNumber;
|
|
684
811
|
const items = [];
|
|
685
|
-
const docs = results[
|
|
812
|
+
const docs = results['items'];
|
|
686
813
|
for (let i = 0; i < docs.length; i++) {
|
|
687
814
|
const doc = docs[i];
|
|
688
815
|
const item = {};
|
|
689
|
-
item[
|
|
690
|
-
const docMetadata = (doc[
|
|
691
|
-
item[
|
|
692
|
-
item[
|
|
693
|
-
item[
|
|
694
|
-
item[
|
|
695
|
-
item[
|
|
816
|
+
item['oid'] = doc['redboxOid'];
|
|
817
|
+
const docMetadata = (doc['metadata'] ?? {});
|
|
818
|
+
item['title'] = docMetadata['title'];
|
|
819
|
+
item['metadata'] = docMetadata;
|
|
820
|
+
item['dateCreated'] = doc['dateCreated'];
|
|
821
|
+
item['dateModified'] = doc['lastSaveDate'];
|
|
822
|
+
item['hasEditAccess'] = this.RecordsService.hasEditAccess(brand, user, roles, doc);
|
|
696
823
|
items.push(item);
|
|
697
824
|
}
|
|
698
825
|
apiReponse.records = items;
|
|
@@ -718,23 +845,23 @@ var Controllers;
|
|
|
718
845
|
const totalItems = results.totalItems;
|
|
719
846
|
const startIndex = start;
|
|
720
847
|
const noItems = rows;
|
|
721
|
-
const pageNumber = Math.floor(
|
|
848
|
+
const pageNumber = Math.floor(startIndex / noItems + 1);
|
|
722
849
|
apiReponse.summary.numFound = totalItems;
|
|
723
850
|
apiReponse.summary.start = startIndex;
|
|
724
851
|
apiReponse.summary.page = pageNumber;
|
|
725
852
|
const items = [];
|
|
726
|
-
const docs = results[
|
|
853
|
+
const docs = results['items'];
|
|
727
854
|
for (let i = 0; i < docs.length; i++) {
|
|
728
855
|
const doc = docs[i];
|
|
729
856
|
const item = {};
|
|
730
|
-
const deletedRecord = (doc[
|
|
731
|
-
const deletedRecordMetadata = (deletedRecord[
|
|
732
|
-
item[
|
|
733
|
-
item[
|
|
734
|
-
item[
|
|
735
|
-
item[
|
|
736
|
-
item[
|
|
737
|
-
item[
|
|
857
|
+
const deletedRecord = (doc['deletedRecordMetadata'] ?? {});
|
|
858
|
+
const deletedRecordMetadata = (deletedRecord['metadata'] ?? {});
|
|
859
|
+
item['oid'] = doc['redboxOid'];
|
|
860
|
+
item['title'] = deletedRecordMetadata['title'];
|
|
861
|
+
item['deletedRecord'] = deletedRecord;
|
|
862
|
+
item['dateCreated'] = doc['dateCreated'];
|
|
863
|
+
item['dateModified'] = doc['lastSaveDate'];
|
|
864
|
+
item['dateDeleted'] = doc['dateDeleted'];
|
|
738
865
|
items.push(item);
|
|
739
866
|
}
|
|
740
867
|
apiReponse.records = items;
|
|
@@ -743,9 +870,11 @@ var Controllers;
|
|
|
743
870
|
listRecords(req, res) {
|
|
744
871
|
//sails.log.debug('api-list-records');
|
|
745
872
|
const brand = BrandingService.getBrand(req.session.branding);
|
|
746
|
-
const
|
|
873
|
+
const validated = (0, index_1.getValidatedApiRequest)(req);
|
|
874
|
+
const { query } = validated;
|
|
875
|
+
const editAccessOnly = query.editOnly;
|
|
747
876
|
let roles = [];
|
|
748
|
-
let username =
|
|
877
|
+
let username = 'guest';
|
|
749
878
|
let user = {};
|
|
750
879
|
if (req.isAuthenticated()) {
|
|
751
880
|
roles = req.user.roles;
|
|
@@ -758,14 +887,14 @@ var Controllers;
|
|
|
758
887
|
roles = [];
|
|
759
888
|
roles.push(RolesService.getDefUnathenticatedRole(brand));
|
|
760
889
|
}
|
|
761
|
-
const recordType =
|
|
762
|
-
const workflowState =
|
|
763
|
-
const start =
|
|
764
|
-
const rows =
|
|
765
|
-
const packageType =
|
|
766
|
-
const sort =
|
|
767
|
-
const filterFieldString =
|
|
768
|
-
let filterString =
|
|
890
|
+
const recordType = query.recordType;
|
|
891
|
+
const workflowState = query.state;
|
|
892
|
+
const start = query.start;
|
|
893
|
+
const rows = query.rows;
|
|
894
|
+
const packageType = query.packageType;
|
|
895
|
+
const sort = query.sort;
|
|
896
|
+
const filterFieldString = query.filterFields;
|
|
897
|
+
let filterString = query.filter;
|
|
769
898
|
let filterFields = undefined;
|
|
770
899
|
if (!_.isEmpty(filterFieldString)) {
|
|
771
900
|
filterFields = filterString.split(',');
|
|
@@ -779,8 +908,7 @@ var Controllers;
|
|
|
779
908
|
else {
|
|
780
909
|
// sails.log.debug(`getRecords: ${recordType} ${workflowState} ${start}`);
|
|
781
910
|
// sails.log.debug(`${rows} ${packageType} ${sort}`);
|
|
782
|
-
return this
|
|
783
|
-
.getRecords(workflowState, recordType, start, rows, user, roles, brand, editAccessOnly, packageType, sort, filterFields, filterString)
|
|
911
|
+
return this.getRecords(workflowState, recordType, start, rows, user, roles, brand, editAccessOnly, packageType, sort, filterFields, filterString)
|
|
784
912
|
.then(response => {
|
|
785
913
|
this.sendResp(req, res, { data: response });
|
|
786
914
|
})
|
|
@@ -790,12 +918,13 @@ var Controllers;
|
|
|
790
918
|
}
|
|
791
919
|
}
|
|
792
920
|
async restoreRecord(req, res) {
|
|
793
|
-
const
|
|
921
|
+
const validated = (0, index_1.getValidatedApiRequest)(req);
|
|
922
|
+
const oid = validated.params.oid;
|
|
794
923
|
const user = req.user ?? {};
|
|
795
924
|
if (_.isEmpty(oid)) {
|
|
796
925
|
return this.sendResp(req, res, {
|
|
797
926
|
status: 400,
|
|
798
|
-
displayErrors: [{ detail:
|
|
927
|
+
displayErrors: [{ detail: 'Missing ID of record.' }],
|
|
799
928
|
});
|
|
800
929
|
}
|
|
801
930
|
const response = await this.RecordsService.restoreRecord(oid, user);
|
|
@@ -807,31 +936,33 @@ var Controllers;
|
|
|
807
936
|
sails.log.verbose(JSON.stringify(response));
|
|
808
937
|
return this.sendResp(req, res, {
|
|
809
938
|
status: 500,
|
|
810
|
-
displayErrors: [{ title: response.message, detail: String(response.details ?? '') }]
|
|
939
|
+
displayErrors: [{ title: response.message, detail: String(response.details ?? '') }],
|
|
811
940
|
});
|
|
812
941
|
}
|
|
813
942
|
}
|
|
814
943
|
async deleteRecord(req, res) {
|
|
815
|
-
const
|
|
944
|
+
const validated = (0, index_1.getValidatedApiRequest)(req);
|
|
945
|
+
const oid = validated.params.oid;
|
|
816
946
|
const permanentlyDelete = req.query.permanent === 'true';
|
|
817
947
|
const user = req.user ?? {};
|
|
818
948
|
if (_.isEmpty(oid)) {
|
|
819
949
|
return this.sendResp(req, res, {
|
|
820
|
-
status: 400,
|
|
950
|
+
status: 400,
|
|
951
|
+
displayErrors: [{ detail: 'Missing ID of record.' }],
|
|
821
952
|
});
|
|
822
953
|
}
|
|
823
954
|
const record = await this.RecordsService.getMeta(oid);
|
|
824
955
|
if (_.isEmpty(record)) {
|
|
825
956
|
return this.sendResp(req, res, {
|
|
826
957
|
status: 400,
|
|
827
|
-
displayErrors: [{ detail:
|
|
958
|
+
displayErrors: [{ detail: 'Record not found!' }],
|
|
828
959
|
});
|
|
829
960
|
}
|
|
830
961
|
const brand = BrandingService.getBrand(req.session.branding);
|
|
831
962
|
if (_.isEmpty(brand)) {
|
|
832
963
|
return this.sendResp(req, res, {
|
|
833
964
|
status: 400,
|
|
834
|
-
displayErrors: [{ detail:
|
|
965
|
+
displayErrors: [{ detail: 'Missing brand.' }],
|
|
835
966
|
});
|
|
836
967
|
}
|
|
837
968
|
const recordType = await (0, rxjs_1.firstValueFrom)(RecordTypesService.get(brand, record.metaMetadata.type));
|
|
@@ -842,17 +973,23 @@ var Controllers;
|
|
|
842
973
|
else {
|
|
843
974
|
return this.sendResp(req, res, {
|
|
844
975
|
status: 500,
|
|
845
|
-
displayErrors: [
|
|
976
|
+
displayErrors: [
|
|
977
|
+
{
|
|
978
|
+
title: response.message,
|
|
979
|
+
detail: `${String(response.details ?? '')} Delete attempt failed for OID: ${oid}`,
|
|
980
|
+
},
|
|
981
|
+
],
|
|
846
982
|
});
|
|
847
983
|
}
|
|
848
984
|
}
|
|
849
985
|
async destroyDeletedRecord(req, res) {
|
|
850
|
-
const
|
|
986
|
+
const validated = (0, index_1.getValidatedApiRequest)(req);
|
|
987
|
+
const oid = validated.params.oid;
|
|
851
988
|
const user = req.user ?? {};
|
|
852
989
|
if (_.isEmpty(oid)) {
|
|
853
990
|
return this.sendResp(req, res, {
|
|
854
991
|
status: 400,
|
|
855
|
-
displayErrors: [{ detail:
|
|
992
|
+
displayErrors: [{ detail: 'Missing ID of record.' }],
|
|
856
993
|
});
|
|
857
994
|
}
|
|
858
995
|
const response = await this.RecordsService.destroyDeletedRecord(oid, user);
|
|
@@ -861,30 +998,39 @@ var Controllers;
|
|
|
861
998
|
}
|
|
862
999
|
else {
|
|
863
1000
|
return this.sendResp(req, res, {
|
|
864
|
-
status: 500,
|
|
1001
|
+
status: 500,
|
|
1002
|
+
displayErrors: [
|
|
1003
|
+
{
|
|
1004
|
+
title: response.message,
|
|
1005
|
+
detail: `${String(response.details ?? '')} Destroy attempt failed for OID: ${oid}`,
|
|
1006
|
+
},
|
|
1007
|
+
],
|
|
865
1008
|
});
|
|
866
1009
|
}
|
|
867
1010
|
}
|
|
868
1011
|
async transitionWorkflow(req, res) {
|
|
869
|
-
const
|
|
870
|
-
const
|
|
1012
|
+
const validated = (0, index_1.getValidatedApiRequest)(req);
|
|
1013
|
+
const oid = validated.params.oid;
|
|
1014
|
+
const targetStepName = validated.params.targetStep;
|
|
871
1015
|
try {
|
|
872
1016
|
if (_.isEmpty(oid)) {
|
|
873
1017
|
return this.sendResp(req, res, {
|
|
874
1018
|
status: 400,
|
|
875
|
-
displayErrors: [{ detail:
|
|
1019
|
+
displayErrors: [{ detail: 'Missing ID of record.' }],
|
|
876
1020
|
});
|
|
877
1021
|
}
|
|
878
1022
|
const brand = BrandingService.getBrand(req.session.branding);
|
|
879
1023
|
const record = await this.RecordsService.getMeta(oid);
|
|
880
1024
|
if (_.isEmpty(record)) {
|
|
881
1025
|
return this.sendResp(req, res, {
|
|
882
|
-
status: 500,
|
|
1026
|
+
status: 500,
|
|
1027
|
+
displayErrors: [{ detail: `Missing OID: ${oid}` }],
|
|
883
1028
|
});
|
|
884
1029
|
}
|
|
885
1030
|
if (!this.RecordsService.hasEditAccess(brand, req.user ?? {}, (req.user ?? {}).roles ?? [], record)) {
|
|
886
1031
|
return this.sendResp(req, res, {
|
|
887
|
-
status: 500,
|
|
1032
|
+
status: 500,
|
|
1033
|
+
displayErrors: [{ detail: `User has no edit permissions for :${oid}` }],
|
|
888
1034
|
});
|
|
889
1035
|
}
|
|
890
1036
|
const recType = await (0, rxjs_1.firstValueFrom)(RecordTypesService.get(brand, record.metaMetadata.type));
|
|
@@ -895,19 +1041,21 @@ var Controllers;
|
|
|
895
1041
|
catch (err) {
|
|
896
1042
|
return this.sendResp(req, res, {
|
|
897
1043
|
errors: [this.asError(err)],
|
|
898
|
-
displayErrors: [{ detail: `Failed to transition workflow to ${targetStepName} for oid ${oid}.` }]
|
|
1044
|
+
displayErrors: [{ detail: `Failed to transition workflow to ${targetStepName} for oid ${oid}.` }],
|
|
899
1045
|
});
|
|
900
1046
|
}
|
|
901
1047
|
}
|
|
902
1048
|
async listDatastreams(req, res) {
|
|
903
|
-
const
|
|
1049
|
+
const validated = (0, index_1.getValidatedApiRequest)(req);
|
|
1050
|
+
const oid = validated.params.oid;
|
|
904
1051
|
if (_.isEmpty(oid)) {
|
|
905
1052
|
return this.sendResp(req, res, {
|
|
906
|
-
status: 400,
|
|
1053
|
+
status: 400,
|
|
1054
|
+
displayErrors: [{ detail: 'Missing ID of record.' }],
|
|
907
1055
|
});
|
|
908
1056
|
}
|
|
909
1057
|
try {
|
|
910
|
-
const attachments = await this.RecordsService.getAttachments(oid);
|
|
1058
|
+
const attachments = await this.RecordsService.getAttachments(oid, undefined, { username: String(req.user?.username ?? '') || undefined });
|
|
911
1059
|
sails.log.verbose(JSON.stringify(attachments));
|
|
912
1060
|
const response = new index_1.ListAPIResponse();
|
|
913
1061
|
response.summary.numFound = _.size(attachments);
|
|
@@ -918,61 +1066,64 @@ var Controllers;
|
|
|
918
1066
|
catch (err) {
|
|
919
1067
|
return this.sendResp(req, res, {
|
|
920
1068
|
errors: [this.asError(err)],
|
|
921
|
-
displayErrors: [{ detail: `Failed to list attachments for ${oid}, pleas.` }]
|
|
1069
|
+
displayErrors: [{ detail: `Failed to list attachments for ${oid}, pleas.` }],
|
|
922
1070
|
});
|
|
923
1071
|
}
|
|
924
1072
|
}
|
|
925
1073
|
async addRoleEdit(req, res) {
|
|
926
1074
|
const brand = BrandingService.getBrand(req.session.branding);
|
|
927
|
-
const
|
|
928
|
-
const
|
|
929
|
-
const
|
|
1075
|
+
const validated = (0, index_1.getValidatedApiRequest)(req);
|
|
1076
|
+
const oid = validated.params.oid;
|
|
1077
|
+
const body = validated.body;
|
|
1078
|
+
const roles = body['roles'];
|
|
930
1079
|
let record;
|
|
931
1080
|
try {
|
|
932
1081
|
record = await this.RecordsService.getMeta(oid);
|
|
933
1082
|
if (roles != null && roles.length > 0) {
|
|
934
|
-
record[
|
|
1083
|
+
record['authorization']['editRoles'] = _.union(record['authorization']['editRoles'], roles);
|
|
935
1084
|
}
|
|
936
1085
|
}
|
|
937
1086
|
catch (err) {
|
|
938
1087
|
return this.sendResp(req, res, {
|
|
939
1088
|
errors: [this.asError(err)],
|
|
940
|
-
displayErrors: [{ detail: 'Failed adding an editor role.' }]
|
|
1089
|
+
displayErrors: [{ detail: 'Failed adding an editor role.' }],
|
|
941
1090
|
});
|
|
942
1091
|
}
|
|
943
1092
|
try {
|
|
944
1093
|
const result = await this.RecordsService.updateMeta(brand, oid, record, req.user ?? {});
|
|
945
1094
|
if (!result.isSuccessful()) {
|
|
946
1095
|
return this.sendResp(req, res, {
|
|
947
|
-
status: 500,
|
|
1096
|
+
status: 500,
|
|
1097
|
+
displayErrors: [{ detail: `Failed to update record with oid ${oid}.` }],
|
|
948
1098
|
});
|
|
949
1099
|
}
|
|
950
1100
|
const recordResult = await this.RecordsService.getMeta(result.oid);
|
|
951
|
-
return this.sendResp(req, res, { data: recordResult[
|
|
1101
|
+
return this.sendResp(req, res, { data: recordResult['authorization'] });
|
|
952
1102
|
}
|
|
953
1103
|
catch (err) {
|
|
954
1104
|
return this.sendResp(req, res, {
|
|
955
1105
|
errors: [this.asError(err)],
|
|
956
|
-
displayErrors: [{ detail: 'Failed adding an editor role.' }]
|
|
1106
|
+
displayErrors: [{ detail: 'Failed adding an editor role.' }],
|
|
957
1107
|
});
|
|
958
1108
|
}
|
|
959
1109
|
}
|
|
960
1110
|
async addRoleView(req, res) {
|
|
961
1111
|
const brand = BrandingService.getBrand(req.session.branding);
|
|
962
|
-
const
|
|
963
|
-
const
|
|
964
|
-
const
|
|
1112
|
+
const validated = (0, index_1.getValidatedApiRequest)(req);
|
|
1113
|
+
const oid = validated.params.oid;
|
|
1114
|
+
const body = validated.body;
|
|
1115
|
+
const roles = body['roles'];
|
|
965
1116
|
let record;
|
|
966
1117
|
try {
|
|
967
1118
|
record = await this.RecordsService.getMeta(oid);
|
|
968
1119
|
if (roles != null && roles.length > 0) {
|
|
969
|
-
record[
|
|
1120
|
+
record['authorization']['viewRoles'] = _.union(record['authorization']['viewRoles'], roles);
|
|
970
1121
|
}
|
|
971
1122
|
}
|
|
972
1123
|
catch (err) {
|
|
973
1124
|
return this.sendResp(req, res, {
|
|
974
1125
|
errors: [this.asError(err)],
|
|
975
|
-
displayErrors: [{ detail: 'Failed getting record meta for adding a viewer role.' }]
|
|
1126
|
+
displayErrors: [{ detail: 'Failed getting record meta for adding a viewer role.' }],
|
|
976
1127
|
});
|
|
977
1128
|
}
|
|
978
1129
|
try {
|
|
@@ -980,35 +1131,36 @@ var Controllers;
|
|
|
980
1131
|
if (!result.isSuccessful()) {
|
|
981
1132
|
return this.sendResp(req, res, {
|
|
982
1133
|
status: 500,
|
|
983
|
-
displayErrors: [{ detail: `Failed to update record with oid ${oid}.` }]
|
|
1134
|
+
displayErrors: [{ detail: `Failed to update record with oid ${oid}.` }],
|
|
984
1135
|
});
|
|
985
1136
|
}
|
|
986
|
-
const resultRecord = await this.RecordsService.getMeta(result[
|
|
987
|
-
return this.sendResp(req, res, { data: resultRecord[
|
|
1137
|
+
const resultRecord = await this.RecordsService.getMeta(result['oid']);
|
|
1138
|
+
return this.sendResp(req, res, { data: resultRecord['authorization'] });
|
|
988
1139
|
}
|
|
989
1140
|
catch (err) {
|
|
990
1141
|
return this.sendResp(req, res, {
|
|
991
1142
|
errors: [this.asError(err)],
|
|
992
|
-
displayErrors: [{ detail: 'Failed updating record meta for adding a viewer role.' }]
|
|
1143
|
+
displayErrors: [{ detail: 'Failed updating record meta for adding a viewer role.' }],
|
|
993
1144
|
});
|
|
994
1145
|
}
|
|
995
1146
|
}
|
|
996
1147
|
async removeRoleEdit(req, res) {
|
|
997
1148
|
const brand = BrandingService.getBrand(req.session.branding);
|
|
998
|
-
const
|
|
999
|
-
const
|
|
1000
|
-
const
|
|
1149
|
+
const validated = (0, index_1.getValidatedApiRequest)(req);
|
|
1150
|
+
const oid = validated.params.oid;
|
|
1151
|
+
const body = validated.body;
|
|
1152
|
+
const roles = body['roles'];
|
|
1001
1153
|
let record;
|
|
1002
1154
|
try {
|
|
1003
1155
|
record = await this.RecordsService.getMeta(oid);
|
|
1004
1156
|
if (roles != null && roles.length > 0) {
|
|
1005
|
-
record[
|
|
1157
|
+
record['authorization']['editRoles'] = _.difference(record['authorization']['editRoles'], roles);
|
|
1006
1158
|
}
|
|
1007
1159
|
}
|
|
1008
1160
|
catch (err) {
|
|
1009
1161
|
return this.sendResp(req, res, {
|
|
1010
1162
|
errors: [this.asError(err)],
|
|
1011
|
-
displayErrors: [{ detail: 'Failed getting record meta for removing an editor role.' }]
|
|
1163
|
+
displayErrors: [{ detail: 'Failed getting record meta for removing an editor role.' }],
|
|
1012
1164
|
});
|
|
1013
1165
|
}
|
|
1014
1166
|
try {
|
|
@@ -1016,23 +1168,24 @@ var Controllers;
|
|
|
1016
1168
|
if (!result.isSuccessful()) {
|
|
1017
1169
|
return this.sendResp(req, res, {
|
|
1018
1170
|
status: 500,
|
|
1019
|
-
displayErrors: [{ detail: `Failed to update record with oid ${oid}.` }]
|
|
1171
|
+
displayErrors: [{ detail: `Failed to update record with oid ${oid}.` }],
|
|
1020
1172
|
});
|
|
1021
1173
|
}
|
|
1022
|
-
const resultRecord = await this.RecordsService.getMeta(result[
|
|
1023
|
-
return this.sendResp(req, res, { data: resultRecord[
|
|
1174
|
+
const resultRecord = await this.RecordsService.getMeta(result['oid']);
|
|
1175
|
+
return this.sendResp(req, res, { data: resultRecord['authorization'] });
|
|
1024
1176
|
}
|
|
1025
1177
|
catch (err) {
|
|
1026
1178
|
return this.sendResp(req, res, {
|
|
1027
1179
|
errors: [this.asError(err)],
|
|
1028
|
-
displayErrors: [{ detail: 'Failed updating record meta for removing an editor role.' }]
|
|
1180
|
+
displayErrors: [{ detail: 'Failed updating record meta for removing an editor role.' }],
|
|
1029
1181
|
});
|
|
1030
1182
|
}
|
|
1031
1183
|
}
|
|
1032
1184
|
async removeRoleView(req, res) {
|
|
1033
1185
|
const brand = BrandingService.getBrand(req.session.branding);
|
|
1034
|
-
const
|
|
1035
|
-
const
|
|
1186
|
+
const validated = (0, index_1.getValidatedApiRequest)(req);
|
|
1187
|
+
const oid = validated.params.oid;
|
|
1188
|
+
const body = validated.body;
|
|
1036
1189
|
const users = body['roles'];
|
|
1037
1190
|
let record;
|
|
1038
1191
|
try {
|
|
@@ -1044,7 +1197,7 @@ var Controllers;
|
|
|
1044
1197
|
catch (err) {
|
|
1045
1198
|
return this.sendResp(req, res, {
|
|
1046
1199
|
errors: [this.asError(err)],
|
|
1047
|
-
displayErrors: [{ detail: 'Failed getting record meta for removing a viewer role.' }]
|
|
1200
|
+
displayErrors: [{ detail: 'Failed getting record meta for removing a viewer role.' }],
|
|
1048
1201
|
});
|
|
1049
1202
|
}
|
|
1050
1203
|
try {
|
|
@@ -1052,7 +1205,7 @@ var Controllers;
|
|
|
1052
1205
|
if (!result.isSuccessful()) {
|
|
1053
1206
|
return this.sendResp(req, res, {
|
|
1054
1207
|
status: 500,
|
|
1055
|
-
displayErrors: [{ detail: `Failed to update record with oid ${oid}.` }]
|
|
1208
|
+
displayErrors: [{ detail: `Failed to update record with oid ${oid}.` }],
|
|
1056
1209
|
});
|
|
1057
1210
|
}
|
|
1058
1211
|
const resultRecord = await this.RecordsService.getMeta(result['oid']);
|
|
@@ -1061,49 +1214,53 @@ var Controllers;
|
|
|
1061
1214
|
catch (err) {
|
|
1062
1215
|
return this.sendResp(req, res, {
|
|
1063
1216
|
errors: [this.asError(err)],
|
|
1064
|
-
displayErrors: [{ detail: 'Failed getting record meta for removing a viewer role.' }]
|
|
1217
|
+
displayErrors: [{ detail: 'Failed getting record meta for removing a viewer role.' }],
|
|
1065
1218
|
});
|
|
1066
1219
|
}
|
|
1067
1220
|
}
|
|
1068
1221
|
async harvest(req, res) {
|
|
1069
1222
|
const brand = BrandingService.getBrand(req.session.branding);
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1223
|
+
const validated = (0, index_1.getValidatedApiRequest)(req);
|
|
1224
|
+
const recordType = validated.params.recordType;
|
|
1225
|
+
const updateMode = _.isEmpty(validated.query.updateMode)
|
|
1226
|
+
? 'override'
|
|
1227
|
+
: validated.query.updateMode;
|
|
1075
1228
|
const recordTypeModel = await (0, rxjs_1.firstValueFrom)(RecordTypesService.get(brand, recordType));
|
|
1076
1229
|
if (recordTypeModel == null) {
|
|
1077
|
-
return this.sendResp(req, res, {
|
|
1230
|
+
return this.sendResp(req, res, {
|
|
1231
|
+
status: 400,
|
|
1232
|
+
displayErrors: [{ detail: 'Record Type provided is not valid' }],
|
|
1233
|
+
});
|
|
1078
1234
|
}
|
|
1079
1235
|
const user = (req.user ?? {});
|
|
1080
|
-
const body =
|
|
1236
|
+
const body = validated.body;
|
|
1081
1237
|
if (body != null) {
|
|
1082
|
-
if (_.isEmpty(body[
|
|
1083
|
-
return this.sendResp(req, res, { status: 400, displayErrors: [{ detail:
|
|
1238
|
+
if (_.isEmpty(body['records'])) {
|
|
1239
|
+
return this.sendResp(req, res, { status: 400, displayErrors: [{ detail: 'Invalid request body' }] });
|
|
1084
1240
|
}
|
|
1085
1241
|
const recordResponses = [];
|
|
1086
1242
|
const records = body['records'];
|
|
1087
1243
|
for (const record of records) {
|
|
1088
|
-
const harvestId = record[
|
|
1244
|
+
const harvestId = record['harvestId'];
|
|
1089
1245
|
if (_.isEmpty(harvestId)) {
|
|
1090
|
-
recordResponses.push(new index_1.APIHarvestResponse(harvestId, '', false,
|
|
1246
|
+
recordResponses.push(new index_1.APIHarvestResponse(harvestId, '', false, 'HarvestId was not specified'));
|
|
1091
1247
|
}
|
|
1092
1248
|
else {
|
|
1249
|
+
const recordRequest = record['recordRequest'];
|
|
1093
1250
|
const existingRecord = await this.findExistingHarvestRecord(harvestId, recordType);
|
|
1094
|
-
if (existingRecord.length == 0 || updateMode ==
|
|
1095
|
-
recordResponses.push(await this.createHarvestRecord(brand, recordTypeModel,
|
|
1251
|
+
if (existingRecord.length == 0 || updateMode == 'create') {
|
|
1252
|
+
recordResponses.push(await this.createHarvestRecord(brand, recordTypeModel, recordRequest, harvestId, updateMode, user));
|
|
1096
1253
|
}
|
|
1097
1254
|
else {
|
|
1098
1255
|
const oid = existingRecord[0].redboxOid;
|
|
1099
|
-
if (updateMode !=
|
|
1100
|
-
const newMetadata = (
|
|
1256
|
+
if (updateMode != 'ignore') {
|
|
1257
|
+
const newMetadata = (recordRequest?.metadata ?? recordRequest);
|
|
1101
1258
|
const existingMetadata = (existingRecord[0]?.metadata ?? {});
|
|
1102
1259
|
if (this.isMetadataEqual(newMetadata, existingMetadata)) {
|
|
1103
1260
|
recordResponses.push(new index_1.APIHarvestResponse(harvestId, oid, true, `Record ignored as the record already exists. oid: ${oid}`));
|
|
1104
1261
|
}
|
|
1105
1262
|
else {
|
|
1106
|
-
recordResponses.push(await this.updateHarvestRecord(brand, recordTypeModel, updateMode,
|
|
1263
|
+
recordResponses.push(await this.updateHarvestRecord(brand, recordTypeModel, updateMode, recordRequest?.metadata, oid, harvestId, user));
|
|
1107
1264
|
}
|
|
1108
1265
|
}
|
|
1109
1266
|
else {
|
|
@@ -1114,17 +1271,21 @@ var Controllers;
|
|
|
1114
1271
|
}
|
|
1115
1272
|
return this.sendResp(req, res, { data: recordResponses });
|
|
1116
1273
|
}
|
|
1117
|
-
return this.sendResp(req, res, { status: 400, displayErrors: [{ detail:
|
|
1274
|
+
return this.sendResp(req, res, { status: 400, displayErrors: [{ detail: 'Invalid request' }] });
|
|
1118
1275
|
}
|
|
1119
1276
|
async legacyHarvest(req, res) {
|
|
1120
1277
|
const brand = BrandingService.getBrand(req.session.branding);
|
|
1121
|
-
const
|
|
1278
|
+
const validated = (0, index_1.getValidatedApiRequest)(req);
|
|
1279
|
+
const recordType = validated.params.recordType;
|
|
1122
1280
|
const recordTypeModel = await (0, rxjs_1.firstValueFrom)(RecordTypesService.get(brand, recordType));
|
|
1123
1281
|
if (recordTypeModel == null) {
|
|
1124
|
-
return this.sendResp(req, res, {
|
|
1282
|
+
return this.sendResp(req, res, {
|
|
1283
|
+
status: 400,
|
|
1284
|
+
displayErrors: [{ detail: 'Record Type provided is not valid' }],
|
|
1285
|
+
});
|
|
1125
1286
|
}
|
|
1126
1287
|
const user = (req.user ?? {});
|
|
1127
|
-
const body =
|
|
1288
|
+
const body = validated.body;
|
|
1128
1289
|
if (body != null) {
|
|
1129
1290
|
if (_.isEmpty(body['records'])) {
|
|
1130
1291
|
return this.sendResp(req, res, { status: 400, displayErrors: [{ detail: 'Invalid request body' }] });
|
|
@@ -1137,26 +1298,27 @@ var Controllers;
|
|
|
1137
1298
|
recordResponses.push(new index_1.APIHarvestResponse(harvestId, '', false, 'HarvestId was not specified'));
|
|
1138
1299
|
}
|
|
1139
1300
|
else {
|
|
1301
|
+
const metadata = record['metadata'];
|
|
1140
1302
|
const existingRecord = await this.findExistingHarvestRecord(harvestId, recordType);
|
|
1141
1303
|
if (existingRecord.length == 0) {
|
|
1142
|
-
recordResponses.push(await this.createHarvestRecord(brand, recordTypeModel,
|
|
1304
|
+
recordResponses.push(await this.createHarvestRecord(brand, recordTypeModel, metadata?.data, harvestId, 'update', user));
|
|
1143
1305
|
}
|
|
1144
1306
|
else {
|
|
1145
|
-
const merge =
|
|
1307
|
+
const merge = validated.query.merge === true;
|
|
1146
1308
|
let updateMode = 'update';
|
|
1147
|
-
if (merge
|
|
1309
|
+
if (merge) {
|
|
1148
1310
|
updateMode = 'merge';
|
|
1149
1311
|
}
|
|
1150
1312
|
const oid = existingRecord[0].redboxOid;
|
|
1151
1313
|
const oldMetadata = (existingRecord[0].metadata ?? {});
|
|
1152
|
-
const newMetadata =
|
|
1314
|
+
const newMetadata = metadata?.data;
|
|
1153
1315
|
if (this.isMetadataEqual(newMetadata, oldMetadata)) {
|
|
1154
1316
|
const response = {
|
|
1155
1317
|
details: '',
|
|
1156
1318
|
message: `skip update of harvestId ${harvestId} oid ${oid} metadata sent is equal to metadata in existing record`,
|
|
1157
1319
|
harvestId: harvestId,
|
|
1158
1320
|
oid: oid,
|
|
1159
|
-
status: true
|
|
1321
|
+
status: true,
|
|
1160
1322
|
};
|
|
1161
1323
|
recordResponses.push(response);
|
|
1162
1324
|
}
|
|
@@ -1172,7 +1334,7 @@ var Controllers;
|
|
|
1172
1334
|
return this.sendResp(req, res, { status: 400, displayErrors: [{ detail: 'Invalid request' }] });
|
|
1173
1335
|
}
|
|
1174
1336
|
async updateHarvestRecord(brand, recordTypeModel, updateMode, body, oid, harvestId, user) {
|
|
1175
|
-
const shouldMerge = updateMode ==
|
|
1337
|
+
const shouldMerge = updateMode == 'merge' ? true : false;
|
|
1176
1338
|
try {
|
|
1177
1339
|
const record = await this.RecordsService.getMeta(oid);
|
|
1178
1340
|
if (_.isEmpty(record)) {
|
|
@@ -1181,7 +1343,7 @@ var Controllers;
|
|
|
1181
1343
|
try {
|
|
1182
1344
|
if (shouldMerge) {
|
|
1183
1345
|
// behavior modified from replacing arrays to appending to arrays:
|
|
1184
|
-
record[
|
|
1346
|
+
record['metadata'] = _.mergeWith(record.metadata, body, (objValue, srcValue) => {
|
|
1185
1347
|
if (_.isArray(objValue)) {
|
|
1186
1348
|
return objValue.concat(srcValue);
|
|
1187
1349
|
}
|
|
@@ -1189,38 +1351,39 @@ var Controllers;
|
|
|
1189
1351
|
});
|
|
1190
1352
|
}
|
|
1191
1353
|
else {
|
|
1192
|
-
record[
|
|
1354
|
+
record['metadata'] = body;
|
|
1193
1355
|
}
|
|
1194
|
-
const sourceMetadata = body[
|
|
1356
|
+
const sourceMetadata = body['sourceMetadata'];
|
|
1195
1357
|
if (!_.isEmpty(sourceMetadata)) {
|
|
1196
1358
|
//Force this to be stored as a string
|
|
1197
|
-
record['metaMetadata'][
|
|
1359
|
+
record['metaMetadata']['sourceMetadata'] =
|
|
1360
|
+
'' + sourceMetadata;
|
|
1198
1361
|
}
|
|
1199
1362
|
await this.RecordsService.updateMeta(brand, oid, record, user);
|
|
1200
|
-
let updateMessage =
|
|
1363
|
+
let updateMessage = 'Record updated successfully';
|
|
1201
1364
|
if (shouldMerge) {
|
|
1202
|
-
updateMessage =
|
|
1365
|
+
updateMessage = 'Record merged successfully';
|
|
1203
1366
|
}
|
|
1204
1367
|
return new index_1.APIHarvestResponse(harvestId, oid, true, updateMessage);
|
|
1205
1368
|
}
|
|
1206
1369
|
catch (error) {
|
|
1207
|
-
const result = new index_1.APIHarvestResponse(harvestId, oid, false,
|
|
1370
|
+
const result = new index_1.APIHarvestResponse(harvestId, oid, false, 'Failed to update meta');
|
|
1208
1371
|
sails.log.error(error, result);
|
|
1209
1372
|
return result;
|
|
1210
1373
|
}
|
|
1211
1374
|
}
|
|
1212
1375
|
catch (error) {
|
|
1213
|
-
const result = new index_1.APIHarvestResponse(harvestId, oid, false,
|
|
1376
|
+
const result = new index_1.APIHarvestResponse(harvestId, oid, false, 'Failed to retrieve record metadata before update');
|
|
1214
1377
|
sails.log.error(error, result);
|
|
1215
1378
|
return result;
|
|
1216
1379
|
}
|
|
1217
1380
|
}
|
|
1218
1381
|
async findExistingHarvestRecord(harvestId, recordType) {
|
|
1219
1382
|
const results = await global.Record.find({
|
|
1220
|
-
|
|
1221
|
-
'metaMetadata.type': recordType
|
|
1383
|
+
harvestId: harvestId,
|
|
1384
|
+
'metaMetadata.type': recordType,
|
|
1222
1385
|
}).meta({
|
|
1223
|
-
enableExperimentalDeepTargets: true
|
|
1386
|
+
enableExperimentalDeepTargets: true,
|
|
1224
1387
|
});
|
|
1225
1388
|
return results;
|
|
1226
1389
|
}
|
|
@@ -1285,7 +1448,9 @@ var Controllers;
|
|
|
1285
1448
|
}
|
|
1286
1449
|
listDeletedRecords(req, res) {
|
|
1287
1450
|
const brand = BrandingService.getBrand(req.session.branding);
|
|
1288
|
-
const
|
|
1451
|
+
const validated = (0, index_1.getValidatedApiRequest)(req);
|
|
1452
|
+
const { query } = validated;
|
|
1453
|
+
const editAccessOnly = query.editOnly;
|
|
1289
1454
|
let roles = [];
|
|
1290
1455
|
let user = {};
|
|
1291
1456
|
if (req.isAuthenticated()) {
|
|
@@ -1294,18 +1459,18 @@ var Controllers;
|
|
|
1294
1459
|
}
|
|
1295
1460
|
else {
|
|
1296
1461
|
// assign default role if needed...
|
|
1297
|
-
user = { username:
|
|
1462
|
+
user = { username: 'guest' };
|
|
1298
1463
|
roles = [];
|
|
1299
1464
|
roles.push(RolesService.getDefUnathenticatedRole(brand));
|
|
1300
1465
|
}
|
|
1301
|
-
const recordType =
|
|
1302
|
-
const workflowState =
|
|
1303
|
-
const start =
|
|
1304
|
-
const rows =
|
|
1305
|
-
const packageType =
|
|
1306
|
-
const sort =
|
|
1307
|
-
const filterFieldString =
|
|
1308
|
-
let filterString =
|
|
1466
|
+
const recordType = query.recordType;
|
|
1467
|
+
const workflowState = query.state;
|
|
1468
|
+
const start = query.start;
|
|
1469
|
+
const rows = query.rows;
|
|
1470
|
+
const packageType = query.packageType;
|
|
1471
|
+
const sort = query.sort;
|
|
1472
|
+
const filterFieldString = query.filterFields;
|
|
1473
|
+
let filterString = query.filter;
|
|
1309
1474
|
let filterFields = undefined;
|
|
1310
1475
|
if (!_.isEmpty(filterFieldString)) {
|
|
1311
1476
|
filterFields = filterString.split(',');
|
|
@@ -1320,29 +1485,35 @@ var Controllers;
|
|
|
1320
1485
|
return this.getDeletedRecords(workflowState, recordType, start, rows, user, roles, brand, editAccessOnly, packageType, sort, filterFields, filterString)
|
|
1321
1486
|
.then(response => {
|
|
1322
1487
|
this.sendResp(req, res, { data: response });
|
|
1323
|
-
})
|
|
1324
|
-
|
|
1488
|
+
})
|
|
1489
|
+
.catch(error => {
|
|
1490
|
+
return this.sendResp(req, res, {
|
|
1491
|
+
errors: [this.asError(error)],
|
|
1492
|
+
displayErrors: [{ detail: error['error'] }],
|
|
1493
|
+
});
|
|
1325
1494
|
});
|
|
1326
1495
|
}
|
|
1327
1496
|
}
|
|
1328
1497
|
reachedMaxRequestRows(req, res) {
|
|
1329
|
-
const descr =
|
|
1498
|
+
const descr = 'You have reached the maximum of request available; Max rows per request ' + sails.config.api.max_requests;
|
|
1330
1499
|
return this.sendResp(req, res, {
|
|
1331
1500
|
status: 400,
|
|
1332
|
-
displayErrors: [
|
|
1501
|
+
displayErrors: [
|
|
1502
|
+
{
|
|
1333
1503
|
detail: descr,
|
|
1334
1504
|
meta: {
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
}
|
|
1342
|
-
}
|
|
1505
|
+
code: 400,
|
|
1506
|
+
contactEmail: null,
|
|
1507
|
+
description: descr,
|
|
1508
|
+
homeRef: '/',
|
|
1509
|
+
reasonPhrase: 'Bad Request',
|
|
1510
|
+
uri: 'http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.1',
|
|
1511
|
+
},
|
|
1512
|
+
},
|
|
1513
|
+
],
|
|
1343
1514
|
});
|
|
1344
1515
|
}
|
|
1345
1516
|
}
|
|
1346
1517
|
Controllers.Record = Record;
|
|
1347
1518
|
})(Controllers || (exports.Controllers = Controllers = {}));
|
|
1348
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVjb3JkQ29udHJvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250cm9sbGVycy93ZWJzZXJ2aWNlL1JlY29yZENvbnRyb2xsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHlGQUF5RjtBQUN6RixFQUFFO0FBQ0YsNkJBQTZCO0FBQzdCLDBCQUEwQjtBQUMxQixFQUFFO0FBQ0YsdUVBQXVFO0FBQ3ZFLHVFQUF1RTtBQUN2RSxvRUFBb0U7QUFDcEUsc0NBQXNDO0FBQ3RDLEVBQUU7QUFDRixrRUFBa0U7QUFDbEUsaUVBQWlFO0FBQ2pFLGdFQUFnRTtBQUNoRSwrQ0FBK0M7QUFDL0MsRUFBRTtBQUNGLDBFQUEwRTtBQUMxRSwwRUFBMEU7QUFDMUUsOERBQThEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFOUQsK0JBQTRDO0FBQzVDLDJDQUE2QjtBQUM3Qix1Q0FhcUI7QUFFckIsK0JBQTJDO0FBRzNDLElBQWlCLFdBQVcsQ0FpMEMzQjtBQWowQ0QsV0FBaUIsV0FBVztJQUMxQjs7OztPQUlHO0lBQ0gsTUFBYSxNQUFPLFNBQVEsbUJBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVTtRQUVyRCxjQUFjLENBQWtCO1FBQ2hDLGFBQWEsQ0FBaUI7UUFDOUIsaUJBQWlCLENBQXFCO1FBQ3RDOztXQUVHO1FBQ2dCLGdCQUFnQixHQUFhO1lBQzlDLE1BQU07WUFDTixRQUFRO1lBQ1IsWUFBWTtZQUNaLGtCQUFrQjtZQUNsQixTQUFTO1lBQ1QsZ0JBQWdCO1lBQ2hCLGVBQWU7WUFDZixhQUFhO1lBQ2IsZ0JBQWdCO1lBQ2hCLGFBQWE7WUFDYixnQkFBZ0I7WUFDaEIsZ0JBQWdCO1lBQ2hCLGVBQWU7WUFDZixnQkFBZ0I7WUFDaEIsYUFBYTtZQUNiLG9CQUFvQjtZQUNwQixjQUFjO1lBQ2Qsc0JBQXNCO1lBQ3RCLGVBQWU7WUFDZixvQkFBb0I7WUFDcEIsaUJBQWlCO1lBQ2pCLGFBQWE7WUFD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
|
|
1519
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVjb3JkQ29udHJvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250cm9sbGVycy93ZWJzZXJ2aWNlL1JlY29yZENvbnRyb2xsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHlGQUF5RjtBQUN6RixFQUFFO0FBQ0YsNkJBQTZCO0FBQzdCLDBCQUEwQjtBQUMxQixFQUFFO0FBQ0YsdUVBQXVFO0FBQ3ZFLHVFQUF1RTtBQUN2RSxvRUFBb0U7QUFDcEUsc0NBQXNDO0FBQ3RDLEVBQUU7QUFDRixrRUFBa0U7QUFDbEUsaUVBQWlFO0FBQ2pFLGdFQUFnRTtBQUNoRSwrQ0FBK0M7QUFDL0MsRUFBRTtBQUNGLDBFQUEwRTtBQUMxRSwwRUFBMEU7QUFDMUUsOERBQThEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFOUQsK0JBQTRDO0FBQzVDLDJDQUE2QjtBQUM3Qix1Q0F5Q3FCO0FBR3JCLCtCQUEyQztBQUUzQyxJQUFpQixXQUFXLENBMnFEM0I7QUEzcURELFdBQWlCLFdBQVc7SUFDMUI7Ozs7T0FJRztJQUNILE1BQWEsTUFBTyxTQUFRLG1CQUFXLENBQUMsSUFBSSxDQUFDLFVBQVU7UUFDckQsY0FBYyxDQUFrQjtRQUNoQyxhQUFhLENBQWlCO1FBQzlCLGlCQUFpQixDQUFxQjtRQUN0Qzs7V0FFRztRQUNnQixnQkFBZ0IsR0FBYTtZQUM5QyxNQUFNO1lBQ04sUUFBUTtZQUNSLFlBQVk7WUFDWixrQkFBa0I7WUFDbEIsU0FBUztZQUNULGdCQUFnQjtZQUNoQixlQUFlO1lBQ2YsYUFBYTtZQUNiLGdCQUFnQjtZQUNoQixhQUFhO1lBQ2IsZ0JBQWdCO1lBQ2hCLGdCQUFnQjtZQUNoQixlQUFlO1lBQ2YsZ0JBQWdCO1lBQ2hCLGFBQWE7WUFDYixvQkFBb0I7WUFDcEIsY0FBYztZQUNkLHNCQUFzQjtZQUN0QixlQUFlO1lBQ2Ysb0JBQW9CO1lBQ3BCLGlCQUFpQjtZQUNqQixhQUFhO1lB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
|