@natlibfi/melinda-rest-api-commons 2.3.0-alpha.7 → 2.3.1-alpha.1
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 +14 -14
- package/dist/utils.js.map +1 -1
- package/package.json +2 -2
package/dist/utils.js
CHANGED
|
@@ -89,7 +89,7 @@ function createRecordResponseItem({
|
|
|
89
89
|
recordMetadata,
|
|
90
90
|
id
|
|
91
91
|
}) {
|
|
92
|
-
const recordResponseStatusAndMessage = getRecordResponseStatusAndMessage(responseStatus, responsePayload);
|
|
92
|
+
const recordResponseStatusAndMessage = getRecordResponseStatusAndMessage(responseStatus, responsePayload, id);
|
|
93
93
|
const recordResponseItem = {
|
|
94
94
|
databaseId: id || '000000000',
|
|
95
95
|
recordMetadata: responsePayload.recordMetadata || recordMetadata || undefined,
|
|
@@ -99,7 +99,7 @@ function createRecordResponseItem({
|
|
|
99
99
|
} // eslint-disable-next-line max-statements
|
|
100
100
|
|
|
101
101
|
|
|
102
|
-
function getRecordResponseStatusAndMessage(responseStatus, responsePayload) {
|
|
102
|
+
function getRecordResponseStatusAndMessage(responseStatus, responsePayload, id) {
|
|
103
103
|
logger.debug(`Response status: ${responseStatus} responsePayload: ${JSON.stringify(responsePayload)}`);
|
|
104
104
|
const responseStatusName = _httpStatus.default[`${responseStatus}_NAME`];
|
|
105
105
|
logger.debug(`Response status name: ${responseStatusName}`);
|
|
@@ -108,7 +108,7 @@ function getRecordResponseStatusAndMessage(responseStatus, responsePayload) {
|
|
|
108
108
|
|
|
109
109
|
if (['UPDATED', 'CREATED', 'INVALID', 'ERROR', 'SKIPPED'].includes(responseStatus)) {
|
|
110
110
|
return {
|
|
111
|
-
|
|
111
|
+
recordStatus: responseStatus,
|
|
112
112
|
message
|
|
113
113
|
};
|
|
114
114
|
}
|
|
@@ -116,7 +116,7 @@ function getRecordResponseStatusAndMessage(responseStatus, responsePayload) {
|
|
|
116
116
|
if (['UNKNOWN'].includes(responseStatus)) {
|
|
117
117
|
const possibleIds = responsePayload.ids || [];
|
|
118
118
|
return {
|
|
119
|
-
|
|
119
|
+
recordStatus: responseStatus,
|
|
120
120
|
message,
|
|
121
121
|
possibleIds
|
|
122
122
|
};
|
|
@@ -127,7 +127,7 @@ function getRecordResponseStatusAndMessage(responseStatus, responsePayload) {
|
|
|
127
127
|
if (/^Duplicates in database/u.test(message)) {
|
|
128
128
|
const duplicateIds = responsePayload.ids || [];
|
|
129
129
|
return {
|
|
130
|
-
|
|
130
|
+
recordStatus: 'DUPLICATE',
|
|
131
131
|
message,
|
|
132
132
|
duplicateIds
|
|
133
133
|
};
|
|
@@ -136,24 +136,24 @@ function getRecordResponseStatusAndMessage(responseStatus, responsePayload) {
|
|
|
136
136
|
if (/^MatchValidation for all/u.test(message)) {
|
|
137
137
|
const duplicateIds = responsePayload.ids || [];
|
|
138
138
|
return {
|
|
139
|
-
|
|
139
|
+
recordStatus: 'CONFLICT',
|
|
140
140
|
message,
|
|
141
141
|
duplicateIds
|
|
142
142
|
};
|
|
143
143
|
}
|
|
144
144
|
|
|
145
|
-
const conflictIds = responsePayload.ids || [];
|
|
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
146
|
|
|
147
|
-
if (conflictIds.length > 0) {
|
|
147
|
+
if (conflictIds.length > 1 || conflictIds[0] !== id) {
|
|
148
148
|
return {
|
|
149
|
-
|
|
149
|
+
recordStatus: 'CONFLICT',
|
|
150
150
|
message,
|
|
151
151
|
conflictIds
|
|
152
152
|
};
|
|
153
153
|
}
|
|
154
154
|
|
|
155
155
|
return {
|
|
156
|
-
|
|
156
|
+
recordStatus: 'CONFLICT',
|
|
157
157
|
message
|
|
158
158
|
};
|
|
159
159
|
}
|
|
@@ -161,11 +161,11 @@ function getRecordResponseStatusAndMessage(responseStatus, responsePayload) {
|
|
|
161
161
|
if ([_httpStatus.default.UNPROCESSABLE_ENTITY, 'UNPROCESSABLE_ENTITY'].includes(responseStatus)) {
|
|
162
162
|
const unprocessableIds = responsePayload.ids || [];
|
|
163
163
|
const response = unprocessableIds.length > 0 ? {
|
|
164
|
-
|
|
164
|
+
recordStatus: 'UNPROCESSABLE_ENTITY',
|
|
165
165
|
message,
|
|
166
166
|
unprocessableIds
|
|
167
167
|
} : {
|
|
168
|
-
|
|
168
|
+
recordStatus: 'UNPROCESSABLE_ENTITY',
|
|
169
169
|
message
|
|
170
170
|
};
|
|
171
171
|
return response;
|
|
@@ -173,14 +173,14 @@ function getRecordResponseStatusAndMessage(responseStatus, responsePayload) {
|
|
|
173
173
|
|
|
174
174
|
if ([_httpStatus.default.NOT_FOUND, 'NOT_FOUND'].includes(responseStatus)) {
|
|
175
175
|
return {
|
|
176
|
-
|
|
176
|
+
recordStatus: 'NOT_FOUND',
|
|
177
177
|
message
|
|
178
178
|
};
|
|
179
179
|
} // Otherwise
|
|
180
180
|
|
|
181
181
|
|
|
182
182
|
return {
|
|
183
|
-
|
|
183
|
+
recordStatus: 'ERROR',
|
|
184
184
|
message
|
|
185
185
|
};
|
|
186
186
|
}
|
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","includes","
|
|
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","includes","recordStatus","possibleIds","ids","CONFLICT","test","duplicateIds","conflictIds","length","UNPROCESSABLE_ENTITY","unprocessableIds","response","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\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 const possibleIds = responsePayload.ids || [];\n return {recordStatus: responseStatus, message, possibleIds};\n }\n\n // Duplicates and other CONFLICT statuses\n if ([httpStatus.CONFLICT, 'CONFLICT'].includes(responseStatus)) {\n if ((/^Duplicates in database/u).test(message)) {\n const duplicateIds = responsePayload.ids || [];\n return {recordStatus: 'DUPLICATE', message, duplicateIds};\n }\n if ((/^MatchValidation for all/u).test(message)) {\n const duplicateIds = responsePayload.ids || [];\n return {recordStatus: 'CONFLICT', message, duplicateIds};\n }\n const conflictIds = responsePayload.ids || [];\n // use conflictIds only if there are more than one id or the id in payload does not match databaseId\n if (conflictIds.length > 1 || conflictIds[0] !== id) {\n return {recordStatus: 'CONFLICT', message, conflictIds};\n }\n return {recordStatus: 'CONFLICT', message};\n }\n\n if ([httpStatus.UNPROCESSABLE_ENTITY, 'UNPROCESSABLE_ENTITY'].includes(responseStatus)) {\n const unprocessableIds = responsePayload.ids || [];\n const response = unprocessableIds.length > 0 ? {recordStatus: 'UNPROCESSABLE_ENTITY', message, unprocessableIds} : {recordStatus: 'UNPROCESSABLE_ENTITY', message};\n return response;\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":";;;;;;;;;;AA4BA;;AACA;;AACA;;AACA;;;;AA/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA,MAAMA,MAAM,GAAG,IAAAC,mCAAA,GAAf;;AAEO,SAASC,QAAT,CAAkBC,GAAlB,EAAuB;EAC5B,IAAIA,GAAG,YAAYC,qBAAnB,EAA6B;IAC3BJ,MAAM,CAACK,KAAP,CAAaC,IAAI,CAACC,SAAL,CAAeJ,GAAf,CAAb;IACA;EACD;;EAED,IAAIA,GAAG,KAAK,QAAZ,EAAsB;IACpBH,MAAM,CAACK,KAAP,CAAaF,GAAb;IACA;EACD;;EAEDH,MAAM,CAACK,KAAP,CAAaF,GAAG,CAACK,KAAJ,KAAcC,SAAd,GAA0BN,GAA1B,GAAgCA,GAAG,CAACK,KAAjD;AACD;;AAEM,SAASE,oBAAT,CAA8BC,SAA9B,EAAyCC,KAAzC,EAAgDC,mBAAmB,GAAG,KAAtE,EAA6E;EAClF,IAAI,EAAED,KAAK,IAAIE,2BAAX,CAAJ,EAAkC;IAChC,MAAM,IAAIC,KAAJ,CAAU,0BAAV,CAAN;EACD;;EAED,IAAI,EAAEJ,SAAS,IAAIK,qBAAf,CAAJ,EAAgC;IAC9B,MAAM,IAAID,KAAJ,CAAU,mBAAV,CAAN;EACD;;EAED,IAAIF,mBAAJ,EAAyB;IACvB,MAAMI,2BAA2B,GAAI,kBAAiBN,SAAU,EAAhE;IACA,MAAMO,sBAAsB,GAAG;MAAC,CAACD,2BAAD,GAA+BL;IAAhC,CAA/B;IAEA,OAAOM,sBAAP;EACD;;EAED,OAAO;IAAC,CAACP,SAAD,GAAaC;EAAd,CAAP;AACD;;AAEM,SAASO,wBAAT,CAAkC;EAACC,eAAD;EAAkBC,cAAlB;EAAkCC,cAAlC;EAAkDC;AAAlD,CAAlC,EAAyF;EAC9F,MAAMC,8BAA8B,GAAGC,iCAAiC,CAACJ,cAAD,EAAiBD,eAAjB,EAAkCG,EAAlC,CAAxE;EACA,MAAMG,kBAAkB,GAAG;IACzBC,UAAU,EAAEJ,EAAE,IAAI,WADO;IAEzBD,cAAc,EAAEF,eAAe,CAACE,cAAhB,IAAkCA,cAAlC,IAAoDb,SAF3C;IAGzB,GAAGe;EAHsB,CAA3B;EAKA,OAAOE,kBAAP;AACD,C,CAED;;;AACA,SAASD,iCAAT,CAA2CJ,cAA3C,EAA2DD,eAA3D,EAA4EG,EAA5E,EAAgF;EAE9EvB,MAAM,CAAC4B,KAAP,CAAc,oBAAmBP,cAAe,qBAAoBf,IAAI,CAACC,SAAL,CAAea,eAAf,CAAgC,EAApG;EACA,MAAMS,kBAAkB,GAAGC,mBAAA,CAAY,GAAET,cAAe,OAA7B,CAA3B;EACArB,MAAM,CAAC4B,KAAP,CAAc,yBAAwBC,kBAAmB,EAAzD;EAEA,MAAME,OAAO,GAAGC,6BAA6B,CAACZ,eAAD,CAA7C;EAEApB,MAAM,CAAC4B,KAAP,CAAc,qBAAoBG,OAAQ,EAA1C,EAR8E,CAU9E;;EACA,IAAI,CAAC,SAAD,EAAY,SAAZ,EAAuB,SAAvB,EAAkC,OAAlC,EAA2C,SAA3C,EAAsDE,QAAtD,CAA+DZ,cAA/D,CAAJ,EAAoF;IAClF,OAAO;MAACa,YAAY,EAAEb,cAAf;MAA+BU;IAA/B,CAAP;EACD;;EAED,IAAI,CAAC,SAAD,EAAYE,QAAZ,CAAqBZ,cAArB,CAAJ,EAA0C;IACxC,MAAMc,WAAW,GAAGf,eAAe,CAACgB,GAAhB,IAAuB,EAA3C;IACA,OAAO;MAACF,YAAY,EAAEb,cAAf;MAA+BU,OAA/B;MAAwCI;IAAxC,CAAP;EACD,CAlB6E,CAoB9E;;;EACA,IAAI,CAACL,mBAAA,CAAWO,QAAZ,EAAsB,UAAtB,EAAkCJ,QAAlC,CAA2CZ,cAA3C,CAAJ,EAAgE;IAC9D,IAAK,0BAAD,CAA6BiB,IAA7B,CAAkCP,OAAlC,CAAJ,EAAgD;MAC9C,MAAMQ,YAAY,GAAGnB,eAAe,CAACgB,GAAhB,IAAuB,EAA5C;MACA,OAAO;QAACF,YAAY,EAAE,WAAf;QAA4BH,OAA5B;QAAqCQ;MAArC,CAAP;IACD;;IACD,IAAK,2BAAD,CAA8BD,IAA9B,CAAmCP,OAAnC,CAAJ,EAAiD;MAC/C,MAAMQ,YAAY,GAAGnB,eAAe,CAACgB,GAAhB,IAAuB,EAA5C;MACA,OAAO;QAACF,YAAY,EAAE,UAAf;QAA2BH,OAA3B;QAAoCQ;MAApC,CAAP;IACD;;IACD,MAAMC,WAAW,GAAGpB,eAAe,CAACgB,GAAhB,IAAuB,EAA3C,CAT8D,CAU9D;;IACA,IAAII,WAAW,CAACC,MAAZ,GAAqB,CAArB,IAA0BD,WAAW,CAAC,CAAD,CAAX,KAAmBjB,EAAjD,EAAqD;MACnD,OAAO;QAACW,YAAY,EAAE,UAAf;QAA2BH,OAA3B;QAAoCS;MAApC,CAAP;IACD;;IACD,OAAO;MAACN,YAAY,EAAE,UAAf;MAA2BH;IAA3B,CAAP;EACD;;EAED,IAAI,CAACD,mBAAA,CAAWY,oBAAZ,EAAkC,sBAAlC,EAA0DT,QAA1D,CAAmEZ,cAAnE,CAAJ,EAAwF;IACtF,MAAMsB,gBAAgB,GAAGvB,eAAe,CAACgB,GAAhB,IAAuB,EAAhD;IACA,MAAMQ,QAAQ,GAAGD,gBAAgB,CAACF,MAAjB,GAA0B,CAA1B,GAA8B;MAACP,YAAY,EAAE,sBAAf;MAAuCH,OAAvC;MAAgDY;IAAhD,CAA9B,GAAkG;MAACT,YAAY,EAAE,sBAAf;MAAuCH;IAAvC,CAAnH;IACA,OAAOa,QAAP;EACD;;EAED,IAAI,CAACd,mBAAA,CAAWe,SAAZ,EAAuB,WAAvB,EAAoCZ,QAApC,CAA6CZ,cAA7C,CAAJ,EAAkE;IAChE,OAAO;MAACa,YAAY,EAAE,WAAf;MAA4BH;IAA5B,CAAP;EACD,CA9C6E,CAgD9E;;;EACA,OAAO;IAACG,YAAY,EAAE,OAAf;IAAwBH;EAAxB,CAAP;AACD;;AAED,SAASC,6BAAT,CAAuCZ,eAAvC,EAAwD;EACtD,IAAIA,eAAe,CAACW,OAApB,EAA6B;IAC3B,OAAOX,eAAe,CAACW,OAAvB;EACD;;EACD,IAAI,OAAOX,eAAP,KAA2B,QAA3B,IAAuCA,eAAe,YAAY0B,MAAtE,EAA8E;IAC5E,OAAO1B,eAAP;EACD;;EACD,OAAO,EAAP;AACD;;AAEM,eAAe2B,qBAAf,CAAqC;EAACrB,kBAAD;EAAqBsB,aAArB;EAAoCC;AAApC,CAArC,EAAyF;EAC9F,MAAMA,aAAa,CAACC,YAAd,CAA2B;IAACF,aAAD;IAAgBG,QAAQ,EAAE,CAACzB,kBAAD,CAA1B;IAAgD0B,YAAY,EAAE;EAA9D,CAA3B,CAAN;EACA,OAAO,IAAP;AACD"}
|
package/package.json
CHANGED
|
@@ -14,8 +14,8 @@
|
|
|
14
14
|
"url": "git@github.com:natlibfi/melinda-rest-api-commons.git"
|
|
15
15
|
},
|
|
16
16
|
"license": "AGPL-3.0+",
|
|
17
|
-
"version": "2.3.
|
|
18
|
-
"main": "
|
|
17
|
+
"version": "2.3.1-alpha.1",
|
|
18
|
+
"main": "dist/index.js",
|
|
19
19
|
"engines": {
|
|
20
20
|
"node": ">=14"
|
|
21
21
|
},
|