@natlibfi/melinda-rest-api-commons 2.3.1-alpha.1 → 2.3.1-alpha.3
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/utils.js +16 -17
- package/dist/utils.js.map +1 -1
- package/package.json +1 -1
package/dist/utils.js
CHANGED
|
@@ -104,6 +104,7 @@ function getRecordResponseStatusAndMessage(responseStatus, responsePayload, id)
|
|
|
104
104
|
const responseStatusName = _httpStatus.default[`${responseStatus}_NAME`];
|
|
105
105
|
logger.debug(`Response status name: ${responseStatusName}`);
|
|
106
106
|
const message = getMessageFromResponsePayload(responsePayload);
|
|
107
|
+
const ids = responsePayload.ids || [];
|
|
107
108
|
logger.debug(`Response message: ${message}`); // Non-http statuses
|
|
108
109
|
|
|
109
110
|
if (['UPDATED', 'CREATED', 'INVALID', 'ERROR', 'SKIPPED'].includes(responseStatus)) {
|
|
@@ -114,41 +115,37 @@ function getRecordResponseStatusAndMessage(responseStatus, responsePayload, id)
|
|
|
114
115
|
}
|
|
115
116
|
|
|
116
117
|
if (['UNKNOWN'].includes(responseStatus)) {
|
|
117
|
-
const possibleIds = responsePayload.ids || [];
|
|
118
118
|
return {
|
|
119
119
|
recordStatus: responseStatus,
|
|
120
120
|
message,
|
|
121
|
-
|
|
121
|
+
ids
|
|
122
122
|
};
|
|
123
123
|
} // Duplicates and other CONFLICT statuses
|
|
124
124
|
|
|
125
125
|
|
|
126
126
|
if ([_httpStatus.default.CONFLICT, 'CONFLICT'].includes(responseStatus)) {
|
|
127
127
|
if (/^Duplicates in database/u.test(message)) {
|
|
128
|
-
const duplicateIds = responsePayload.ids || [];
|
|
129
128
|
return {
|
|
130
129
|
recordStatus: 'DUPLICATE',
|
|
131
130
|
message,
|
|
132
|
-
|
|
131
|
+
ids
|
|
133
132
|
};
|
|
134
133
|
}
|
|
135
134
|
|
|
136
135
|
if (/^MatchValidation for all/u.test(message)) {
|
|
137
|
-
const duplicateIds = responsePayload.ids || [];
|
|
138
136
|
return {
|
|
139
137
|
recordStatus: 'CONFLICT',
|
|
140
138
|
message,
|
|
141
|
-
|
|
139
|
+
ids
|
|
142
140
|
};
|
|
143
|
-
}
|
|
141
|
+
} // Use ids only if there are more than one id or the id in payload does not match databaseId
|
|
144
142
|
|
|
145
|
-
const conflictIds = responsePayload.ids || []; // use conflictIds only if there are more than one id or the id in payload does not match databaseId
|
|
146
143
|
|
|
147
|
-
if (
|
|
144
|
+
if (ids.length > 1 || ids[0] !== id) {
|
|
148
145
|
return {
|
|
149
146
|
recordStatus: 'CONFLICT',
|
|
150
147
|
message,
|
|
151
|
-
|
|
148
|
+
ids
|
|
152
149
|
};
|
|
153
150
|
}
|
|
154
151
|
|
|
@@ -159,16 +156,18 @@ function getRecordResponseStatusAndMessage(responseStatus, responsePayload, id)
|
|
|
159
156
|
}
|
|
160
157
|
|
|
161
158
|
if ([_httpStatus.default.UNPROCESSABLE_ENTITY, 'UNPROCESSABLE_ENTITY'].includes(responseStatus)) {
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
159
|
+
if (ids.length > 1 || ids[0] !== id) {
|
|
160
|
+
return {
|
|
161
|
+
recordStatus: 'UNPROCESSABLE_ENTITY',
|
|
162
|
+
message,
|
|
163
|
+
ids
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
return {
|
|
168
168
|
recordStatus: 'UNPROCESSABLE_ENTITY',
|
|
169
169
|
message
|
|
170
170
|
};
|
|
171
|
-
return response;
|
|
172
171
|
}
|
|
173
172
|
|
|
174
173
|
if ([_httpStatus.default.NOT_FOUND, 'NOT_FOUND'].includes(responseStatus)) {
|
package/dist/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","names":["logger","createLogger","logError","err","ApiError","error","JSON","stringify","stack","undefined","createImportJobState","operation","state","queryImportJobState","IMPORT_JOB_STATE","Error","OPERATIONS","importJobStateWithOperation","importJobStateForQuery","createRecordResponseItem","responsePayload","responseStatus","recordMetadata","id","recordResponseStatusAndMessage","getRecordResponseStatusAndMessage","recordResponseItem","databaseId","debug","responseStatusName","httpStatus","message","getMessageFromResponsePayload","
|
|
1
|
+
{"version":3,"file":"utils.js","names":["logger","createLogger","logError","err","ApiError","error","JSON","stringify","stack","undefined","createImportJobState","operation","state","queryImportJobState","IMPORT_JOB_STATE","Error","OPERATIONS","importJobStateWithOperation","importJobStateForQuery","createRecordResponseItem","responsePayload","responseStatus","recordMetadata","id","recordResponseStatusAndMessage","getRecordResponseStatusAndMessage","recordResponseItem","databaseId","debug","responseStatusName","httpStatus","message","getMessageFromResponsePayload","ids","includes","recordStatus","CONFLICT","test","length","UNPROCESSABLE_ENTITY","NOT_FOUND","String","addRecordResponseItem","correlationId","mongoOperator","pushMessages","messages","messageField"],"sources":["../src/utils.js"],"sourcesContent":["/**\n*\n* @licstart The following is the entire license notice for the JavaScript code in this file.\n*\n* Shared modules for microservices of Melinda rest api batch import system\n*\n* Copyright (C) 2020-2021 University Of Helsinki (The National Library Of Finland)\n*\n* This file is part of melinda-rest-api-commons\n*\n* melinda-rest-api-commons program is free software: you can redistribute it and/or modify\n* it under the terms of the GNU Affero General Public License as\n* published by the Free Software Foundation, either version 3 of the\n* License, or (at your option) any later version.\n*\n* melinda-rest-api-commons is distributed in the hope that it will be useful,\n* but WITHOUT ANY WARRANTY; without even the implied warranty of\n* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n* GNU Affero General Public License for more details.\n*\n* You should have received a copy of the GNU Affero General Public License\n* along with this program. If not, see <http://www.gnu.org/licenses/>.\n*\n* @licend The above is the entire license notice\n* for the JavaScript code in this file.\n*\n*/\n\nimport {createLogger} from '@natlibfi/melinda-backend-commons';\nimport {Error as ApiError} from '@natlibfi/melinda-commons';\nimport {IMPORT_JOB_STATE, OPERATIONS} from './constants';\nimport httpStatus from 'http-status';\n\nconst logger = createLogger();\n\nexport function logError(err) {\n if (err instanceof ApiError) {\n logger.error(JSON.stringify(err));\n return;\n }\n\n if (err === 'SIGINT') {\n logger.error(err);\n return;\n }\n\n logger.error(err.stack === undefined ? err : err.stack);\n}\n\nexport function createImportJobState(operation, state, queryImportJobState = false) {\n if (!(state in IMPORT_JOB_STATE)) {\n throw new Error('Invalid IMPORT_JOB_STATE');\n }\n\n if (!(operation in OPERATIONS)) {\n throw new Error('Invalid operation');\n }\n\n if (queryImportJobState) {\n const importJobStateWithOperation = `importJobState.${operation}`;\n const importJobStateForQuery = {[importJobStateWithOperation]: state};\n\n return importJobStateForQuery;\n }\n\n return {[operation]: state};\n}\n\nexport function createRecordResponseItem({responsePayload, responseStatus, recordMetadata, id}) {\n const recordResponseStatusAndMessage = getRecordResponseStatusAndMessage(responseStatus, responsePayload, id);\n const recordResponseItem = {\n databaseId: id || '000000000',\n recordMetadata: responsePayload.recordMetadata || recordMetadata || undefined,\n ...recordResponseStatusAndMessage\n };\n return recordResponseItem;\n}\n\n// eslint-disable-next-line max-statements\nfunction getRecordResponseStatusAndMessage(responseStatus, responsePayload, id) {\n\n logger.debug(`Response status: ${responseStatus} responsePayload: ${JSON.stringify(responsePayload)}`);\n const responseStatusName = httpStatus[`${responseStatus}_NAME`];\n logger.debug(`Response status name: ${responseStatusName}`);\n\n const message = getMessageFromResponsePayload(responsePayload);\n const ids = responsePayload.ids || [];\n\n logger.debug(`Response message: ${message}`);\n\n // Non-http statuses\n if (['UPDATED', 'CREATED', 'INVALID', 'ERROR', 'SKIPPED'].includes(responseStatus)) {\n return {recordStatus: responseStatus, message};\n }\n\n if (['UNKNOWN'].includes(responseStatus)) {\n return {recordStatus: responseStatus, message, ids};\n }\n\n // Duplicates and other CONFLICT statuses\n if ([httpStatus.CONFLICT, 'CONFLICT'].includes(responseStatus)) {\n if ((/^Duplicates in database/u).test(message)) {\n return {recordStatus: 'DUPLICATE', message, ids};\n }\n if ((/^MatchValidation for all/u).test(message)) {\n return {recordStatus: 'CONFLICT', message, ids};\n }\n\n // Use ids only if there are more than one id or the id in payload does not match databaseId\n if (ids.length > 1 || ids[0] !== id) {\n return {recordStatus: 'CONFLICT', message, ids};\n }\n return {recordStatus: 'CONFLICT', message};\n }\n\n if ([httpStatus.UNPROCESSABLE_ENTITY, 'UNPROCESSABLE_ENTITY'].includes(responseStatus)) {\n if (ids.length > 1 || ids[0] !== id) {\n return {recordStatus: 'UNPROCESSABLE_ENTITY', message, ids};\n }\n return {recordStatus: 'UNPROCESSABLE_ENTITY', message};\n }\n\n if ([httpStatus.NOT_FOUND, 'NOT_FOUND'].includes(responseStatus)) {\n return {recordStatus: 'NOT_FOUND', message};\n }\n\n // Otherwise\n return {recordStatus: 'ERROR', message};\n}\n\nfunction getMessageFromResponsePayload(responsePayload) {\n if (responsePayload.message) {\n return responsePayload.message;\n }\n if (typeof responsePayload === 'string' || responsePayload instanceof String) {\n return responsePayload;\n }\n return '';\n}\n\nexport async function addRecordResponseItem({recordResponseItem, correlationId, mongoOperator}) {\n await mongoOperator.pushMessages({correlationId, messages: [recordResponseItem], messageField: 'records'});\n return true;\n}\n\n"],"mappings":"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"}
|