From 8b2f747ae1fb5476da860a5bd90b9b66b61dde99 Mon Sep 17 00:00:00 2001 From: eug-vs Date: Sat, 20 Mar 2021 01:08:15 +0300 Subject: feat: apply transfer after CRUD --- src/services/transfers.service.ts | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) (limited to 'src/services/transfers.service.ts') 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 => { + 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, + } }) }; -- cgit v1.2.3