@researchdatabox/sails-hook-redbox-storage-mongo 1.4.10 → 1.4.11
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.
|
@@ -151,8 +151,14 @@ var Services;
|
|
|
151
151
|
response.success = true;
|
|
152
152
|
}
|
|
153
153
|
catch (err) {
|
|
154
|
-
sails.log.error(`${this.logHeader} Failed to save update to MongoDB
|
|
155
|
-
|
|
154
|
+
sails.log.error(`${this.logHeader} Failed to save update to MongoDB: ${JSON.stringify({
|
|
155
|
+
error: err,
|
|
156
|
+
response: response,
|
|
157
|
+
brand: brand,
|
|
158
|
+
oid: oid,
|
|
159
|
+
record: record,
|
|
160
|
+
user: user,
|
|
161
|
+
})}`);
|
|
156
162
|
response.success = false;
|
|
157
163
|
response.message = err;
|
|
158
164
|
}
|
|
@@ -199,28 +205,24 @@ var Services;
|
|
|
199
205
|
provideUserAccessAndRemovePendingAccess(oid, userid, pendingValue) {
|
|
200
206
|
const batchFn = () => __awaiter(this, void 0, void 0, function* () {
|
|
201
207
|
const metadata = yield this.getMeta(oid);
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
metadata
|
|
212
|
-
metadata
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
metadata['authorization']['viewPending'] = pendingViewArray;
|
|
223
|
-
metadata['authorization']['view'] = viewArray;
|
|
208
|
+
const pendingEditArray = _.get(metadata, 'authorization.editPending', []);
|
|
209
|
+
const editArray = _.get(metadata, 'authorization.edit', []);
|
|
210
|
+
const pendingEditArrayFiltered = pendingEditArray.filter(value => value !== pendingValue);
|
|
211
|
+
const pendingEditFound = pendingEditArray.length > pendingEditArrayFiltered.length;
|
|
212
|
+
if (pendingEditFound && !editArray.includes(userid)) {
|
|
213
|
+
editArray.push(userid);
|
|
214
|
+
}
|
|
215
|
+
_.set(metadata, 'authorization.editPending', pendingEditArrayFiltered);
|
|
216
|
+
_.set(metadata, 'authorization.edit', editArray);
|
|
217
|
+
const pendingViewArray = _.get(metadata, 'authorization.viewPending', []);
|
|
218
|
+
const viewArray = _.get(metadata, 'authorization.view', []);
|
|
219
|
+
const pendingViewArrayFiltered = pendingViewArray.filter(value => value !== pendingValue);
|
|
220
|
+
const pendingViewFound = pendingViewArray.length > pendingViewArrayFiltered.length;
|
|
221
|
+
if (pendingViewFound && !viewArray.includes(userid)) {
|
|
222
|
+
viewArray.push(userid);
|
|
223
|
+
}
|
|
224
|
+
_.set(metadata, 'authorization.viewPending', pendingViewArrayFiltered);
|
|
225
|
+
_.set(metadata, 'authorization.view', viewArray);
|
|
224
226
|
try {
|
|
225
227
|
yield this.updateMeta(null, oid, metadata);
|
|
226
228
|
}
|
package/package.json
CHANGED
|
@@ -162,8 +162,14 @@ export module Services {
|
|
|
162
162
|
await Record.updateOne({ redboxOid: oid }).set(record);
|
|
163
163
|
response.success = true;
|
|
164
164
|
} catch (err) {
|
|
165
|
-
sails.log.error(`${this.logHeader} Failed to save update to MongoDB
|
|
166
|
-
|
|
165
|
+
sails.log.error(`${this.logHeader} Failed to save update to MongoDB: ${JSON.stringify({
|
|
166
|
+
error: err,
|
|
167
|
+
response: response,
|
|
168
|
+
brand: brand,
|
|
169
|
+
oid: oid,
|
|
170
|
+
record: record,
|
|
171
|
+
user: user,
|
|
172
|
+
})}`);
|
|
167
173
|
response.success = false;
|
|
168
174
|
response.message = err;
|
|
169
175
|
}
|
|
@@ -208,33 +214,55 @@ export module Services {
|
|
|
208
214
|
return response;
|
|
209
215
|
}
|
|
210
216
|
|
|
217
|
+
/**
|
|
218
|
+
* If pendingValue is in editPending or viewPending, remove all instances from the pending arrays and
|
|
219
|
+
* put the userid in the matching access / non-pending array, then save the changes to the storage.
|
|
220
|
+
*
|
|
221
|
+
* Implementation Note: This is a sync method, but it calls async methods.
|
|
222
|
+
* This means that the storage will not be updated when this method returns, but at some point later.
|
|
223
|
+
*
|
|
224
|
+
* @param oid The record identifier.
|
|
225
|
+
* @param userid The value to put in the matching access / non-pending arrays.
|
|
226
|
+
* @param pendingValue The value to find in the pending arrays.
|
|
227
|
+
*/
|
|
211
228
|
public provideUserAccessAndRemovePendingAccess(oid, userid, pendingValue): void {
|
|
212
229
|
const batchFn = async () => {
|
|
213
230
|
const metadata = await this.getMeta(oid);
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
231
|
+
|
|
232
|
+
// Update edit authorization - remove pending edit access and add real edit access with userid
|
|
233
|
+
const pendingEditArray: string[] = _.get(metadata, 'authorization.editPending', []);
|
|
234
|
+
const editArray: string[] = _.get(metadata, 'authorization.edit', []);
|
|
235
|
+
|
|
236
|
+
// remove all items matching pendingValue from the pendingEditArray
|
|
237
|
+
const pendingEditArrayFiltered = pendingEditArray.filter(value => value !== pendingValue);
|
|
238
|
+
const pendingEditFound = pendingEditArray.length > pendingEditArrayFiltered.length;
|
|
239
|
+
|
|
240
|
+
// add the item to the editArray if it existed in the pendingEditArray, and it is not in the editArray
|
|
241
|
+
if (pendingEditFound && !editArray.includes(userid)) {
|
|
242
|
+
editArray.push(userid);
|
|
223
243
|
}
|
|
224
|
-
|
|
225
|
-
metadata
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
244
|
+
|
|
245
|
+
// update the metadata with the modified arrays
|
|
246
|
+
_.set(metadata, 'authorization.editPending', pendingEditArrayFiltered);
|
|
247
|
+
_.set(metadata, 'authorization.edit', editArray);
|
|
248
|
+
|
|
249
|
+
// Update view authorization - remove pending view access and add real view access with userid
|
|
250
|
+
const pendingViewArray: string[] = _.get(metadata, 'authorization.viewPending', []);
|
|
251
|
+
const viewArray: string[] = _.get(metadata, 'authorization.view', []);
|
|
252
|
+
|
|
253
|
+
// remove all items matching pendingValue from the pendingViewArray
|
|
254
|
+
const pendingViewArrayFiltered = pendingViewArray.filter(value => value !== pendingValue);
|
|
255
|
+
const pendingViewFound = pendingViewArray.length > pendingViewArrayFiltered.length;
|
|
256
|
+
|
|
257
|
+
// add the item to the viewArray if it existed in the pendingViewArray, and it is not in the viewArray
|
|
258
|
+
if (pendingViewFound && !viewArray.includes(userid)) {
|
|
259
|
+
viewArray.push(userid);
|
|
235
260
|
}
|
|
236
|
-
|
|
237
|
-
metadata
|
|
261
|
+
|
|
262
|
+
// update the metadata with the modified arrays
|
|
263
|
+
_.set(metadata, 'authorization.viewPending', pendingViewArrayFiltered);
|
|
264
|
+
_.set(metadata, 'authorization.view', viewArray);
|
|
265
|
+
|
|
238
266
|
try {
|
|
239
267
|
await this.updateMeta(null, oid, metadata);
|
|
240
268
|
} catch (err) {
|
|
@@ -242,6 +270,8 @@ export module Services {
|
|
|
242
270
|
sails.log.error(JSON.stringify(err));
|
|
243
271
|
}
|
|
244
272
|
};
|
|
273
|
+
|
|
274
|
+
// TODO: Fix this so that the method only returns after the storage is updated.
|
|
245
275
|
batchFn();
|
|
246
276
|
}
|
|
247
277
|
|