diff options
author | eug-vs <eug-vs@keemail.me> | 2020-06-10 18:43:09 +0300 |
---|---|---|
committer | eug-vs <eug-vs@keemail.me> | 2020-06-10 18:43:09 +0300 |
commit | 709416b125f7099b34686ea8c1d35cf7328a19e8 (patch) | |
tree | f2dcc4c91533e314a0ee729a2fae810854a2e433 | |
parent | fd03f269c0e9498e58fe7a381794ab84991b054e (diff) | |
download | which-api-709416b125f7099b34686ea8c1d35cf7328a19e8.tar.gz |
feat: add expandAuthor hook to polls
-rw-r--r-- | services/polls/polls.hooks.ts | 38 | ||||
-rw-r--r-- | services/polls/polls.service.ts | 2 |
2 files changed, 40 insertions, 0 deletions
diff --git a/services/polls/polls.hooks.ts b/services/polls/polls.hooks.ts new file mode 100644 index 0000000..ff6a83f --- /dev/null +++ b/services/polls/polls.hooks.ts @@ -0,0 +1,38 @@ +import { HookContext } from '@feathersjs/feathers'; +import bluebird from 'bluebird'; +import _ from 'lodash'; + +import { PollSchema } from '../../models/polls/poll.schema'; +import { UserSchema } from '../../models/users/user.schema'; +import UserModel from '../../models/users/user.model'; + + +interface Poll extends Omit<PollSchema, 'authorId'> { + author: UserSchema; +} + +const expandAuthor = async (poll: PollSchema): Promise<Poll | null> => { + return UserModel.findById(poll.authorId).then((author: UserSchema | null): Poll | null => { + if (author) return _.merge(_.omit(poll, 'authorId'), { author }); + return null; + }); +}; + +const expandAuthorHook = async (context: HookContext): Promise<HookContext> => { + context.result = await expandAuthor(context.result); + return context; +}; + +const expandAuthorManyHook = async (context: HookContext): Promise<HookContext> => { + context.result = await bluebird.map(context.result, (poll: any) => expandAuthor(poll)); + console.log(context.result); + return context; +}; + + +export default { + after: { + get: [expandAuthorHook], + find: [expandAuthorManyHook] + } +} diff --git a/services/polls/polls.service.ts b/services/polls/polls.service.ts index ca75d5a..9635adf 100644 --- a/services/polls/polls.service.ts +++ b/services/polls/polls.service.ts @@ -1,10 +1,12 @@ import { Application } from '@feathersjs/express'; import Model from '../../models/polls/poll.model'; import service from 'feathers-mongoose'; +import hooks from './polls.hooks' const PollService = service({ Model }); export default (app: Application): void => { app.use('/polls', PollService); + app.service('polls').hooks(hooks); }; |