diff options
| -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, +    }    })  }; | 
