diff options
author | eug-vs <eug-vs@keemail.me> | 2021-03-20 01:08:15 +0300 |
---|---|---|
committer | eug-vs <eug-vs@keemail.me> | 2021-03-20 01:08:15 +0300 |
commit | 8b2f747ae1fb5476da860a5bd90b9b66b61dde99 (patch) | |
tree | f07ca394c86d91c070b7676af51008eabe770490 | |
parent | d6b46d8cad8dce2dafc878dfae53c71bdda39dd0 (diff) | |
download | commercel-api-8b2f747ae1fb5476da860a5bd90b9b66b61dde99.tar.gz |
feat: apply transfer after CRUD
-rw-r--r-- | src/services/transfers.service.ts | 33 |
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, + } }) }; |