summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoreug-vs <eug-vs@keemail.me>2021-03-20 01:08:15 +0300
committereug-vs <eug-vs@keemail.me>2021-03-20 01:08:15 +0300
commit8b2f747ae1fb5476da860a5bd90b9b66b61dde99 (patch)
treef07ca394c86d91c070b7676af51008eabe770490
parentd6b46d8cad8dce2dafc878dfae53c71bdda39dd0 (diff)
downloadcommercel-api-8b2f747ae1fb5476da860a5bd90b9b66b61dde99.tar.gz
feat: apply transfer after CRUD
-rw-r--r--src/services/transfers.service.ts33
1 files changed, 32 insertions, 1 deletions
diff --git a/src/services/transfers.service.ts b/src/services/transfers.service.ts
index 1d7bdaf..c6fdad9 100644
--- a/src/services/transfers.service.ts
+++ b/src/services/transfers.service.ts
@@ -1,6 +1,7 @@
import { Application } from '@feathersjs/express';
+import { HookContext } from '@feathersjs/feathers';
import service from 'feathers-mongoose';
-import { populate, alterItems } from 'feathers-hooks-common';
+import { populate, alterItems, getItems } from 'feathers-hooks-common';
import Model from '../models/transfer/transfer.model';
import formatDate from '../hooks/formatDate';
@@ -24,6 +25,30 @@ const addFields = (item: any) => {
return { ...item, name };
};
+const applyTransfer = async (context: HookContext): Promise<HookContext> => {
+ const { contractorId, amount, operation, _id } = getItems(context);
+
+ let inc;
+
+ // After Create / Delete
+ if (context.method === 'create') inc = amount;
+ if (context.method === 'remove') inc = -amount;
+
+ // Before Patch / Update
+ else if (['patch', 'update'].includes(context.method)) {
+ const oldTransfer = await context.service.get(_id);
+ inc = amount ? (amount - oldTransfer.amount) : 0;
+ };
+
+ if (inc) await context.app.service('contractors').patch(contractorId, {
+ $inc: {
+ debt: inc * (operation === 'in' ? -1 : 1)
+ }
+ });
+
+ return context;
+};
+
export default (app: Application): void => {
app.use('/transfers', transfers);
@@ -34,7 +59,13 @@ export default (app: Application): void => {
alterItems(addFields),
formatDate(),
],
+ create: applyTransfer,
+ remove: applyTransfer,
},
+ before: {
+ patch: applyTransfer,
+ update: applyTransfer,
+ }
})
};