diff options
author | Eugene Sokolov <eug-vs@keemail.me> | 2020-06-11 01:15:01 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-06-11 01:15:01 +0300 |
commit | 40b804ffdd26a0c9bab95b4ec6a539d9fe429ed3 (patch) | |
tree | 7cdb3cb7b86e3333c15bbaefe14fe228cc93d023 /services/polls/polls.hooks.ts | |
parent | de9771959850f193f173616b73099c3ae6f010c9 (diff) | |
parent | d40f6e6cf8150f9e112d0b5d8d7075c2fc90264b (diff) | |
download | which-api-40b804ffdd26a0c9bab95b4ec6a539d9fe429ed3.tar.gz |
Merge pull request #3 from eug-vs/hooks
Expand authorId field in polls
Diffstat (limited to 'services/polls/polls.hooks.ts')
-rw-r--r-- | services/polls/polls.hooks.ts | 40 |
1 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..fc5fa45 --- /dev/null +++ b/services/polls/polls.hooks.ts @@ -0,0 +1,40 @@ +import { HookContext } from '@feathersjs/feathers'; +import bluebird from 'bluebird'; +import _ from 'lodash'; + +import { Poll, PollSchema } from '../../models/polls/poll.schema'; +import { User } from '../../models/users/user.schema'; +import UserModel from '../../models/users/user.model'; + + +const expandAuthor = async (poll: PollSchema): Promise<Poll | null> => { + return UserModel.findById(poll.authorId) + .lean<User>() + .exec() + .then((author: User | null): Poll | null => { + return author && _.merge(_.omit(poll, 'authorId'), { author }); + }) + .catch(err => { + console.error(err); + return err; + }); +}; + +const expandAuthorHook = async (context: HookContext): Promise<HookContext> => { + context.result = await expandAuthor(context.result); + return context; +}; + +const expandAuthorManyHook = async (context: HookContext): Promise<HookContext> => { + const polls = await bluebird.map(context.result, (poll: any) => expandAuthor(poll)); + context.result = _.compact(polls); + return context; +}; + + +export default { + after: { + get: [expandAuthorHook], + find: [expandAuthorManyHook] + } +} |