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 /src/services | |
| parent | d6b46d8cad8dce2dafc878dfae53c71bdda39dd0 (diff) | |
| download | commercel-api-8b2f747ae1fb5476da860a5bd90b9b66b61dde99.tar.gz | |
feat: apply transfer after CRUD
Diffstat (limited to 'src/services')
| -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, +    }    })  }; | 
