Skip to content

Commit 9011b2c

Browse files
authored
New softDelete for Feathers 4 (#544)
1 parent adb80ce commit 9011b2c

File tree

3 files changed

+216
-261
lines changed

3 files changed

+216
-261
lines changed

lib/services/make-calling-params.js

Lines changed: 0 additions & 14 deletions
This file was deleted.

lib/services/soft-delete.js

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,42 @@
1+
const { GeneralError } = require('@feathersjs/errors');
12
const checkContext = require('./check-context');
23

3-
module.exports = function (field) {
4-
const deleteField = field || 'deleted';
4+
const defaultQuery = { deleted: { $ne: true } };
5+
const defaultData = { deleted: true };
6+
const getValue = (value, ...args) => {
7+
if (typeof value === 'function') {
8+
return Promise.resolve(value(...args));
9+
}
10+
return Promise.resolve(value);
11+
};
512

6-
return function (context) {
7-
const { service, method, params: { query = {} } } = context;
13+
module.exports = ({
14+
deletedQuery = defaultQuery,
15+
removeData = defaultData
16+
} = {}) => {
17+
return async context => {
18+
const { service, method, params, app } = context;
19+
const { disableSoftDelete, query = {} } = params;
820

9-
context.params.query = query;
21+
if (app.version < '4.0.0') {
22+
throw new GeneralError('The softDelete hook requires Feathers 4.0.0 or later');
23+
}
1024

1125
checkContext(context, 'before', null, 'softDelete');
1226

13-
if (context.params.query.$disableSoftDelete) {
14-
delete context.params.query.$disableSoftDelete;
27+
if (disableSoftDelete) {
1528
return context;
1629
}
1730

18-
context.params.query = Object.assign({}, {
19-
[deleteField]: { $ne: true }
20-
}, context.params.query);
31+
const deleteQuery = await getValue(deletedQuery, context);
32+
33+
context.params.query = Object.assign({}, query, deleteQuery);
2134

2235
if (method === 'remove') {
23-
context.data[deleteField] = true;
36+
const data = await getValue(removeData, context);
37+
const result = await service.patch(context.id, data, params);
2438

25-
return service.patch(context.id, { [deleteField]: true }, context.params)
26-
.then(result => {
27-
context.result = result;
28-
return context;
29-
});
39+
context.result = result;
3040
}
3141

3242
return context;

0 commit comments

Comments
 (0)