diff options
author | eug-vs <eug-vs@keemail.me> | 2020-06-12 16:46:56 +0300 |
---|---|---|
committer | eug-vs <eug-vs@keemail.me> | 2020-06-12 16:46:56 +0300 |
commit | fb889145e2e3414925553152e8aff6a096bc0cae (patch) | |
tree | 1515af5db979994e08341bd9f8d82d8a3baee475 /hooks | |
parent | c9fc9c12b452d9aa8630cdfdaf494381a5dfdd8b (diff) | |
download | which-api-fb889145e2e3414925553152e8aff6a096bc0cae.tar.gz |
refactor: move hooks to global folder
Diffstat (limited to 'hooks')
-rw-r--r-- | hooks/expandAuthor.ts | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/hooks/expandAuthor.ts b/hooks/expandAuthor.ts new file mode 100644 index 0000000..1f33ff0 --- /dev/null +++ b/hooks/expandAuthor.ts @@ -0,0 +1,32 @@ +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; + }); +}; + +export const expandAuthorHook = async (context: HookContext): Promise<HookContext> => { + context.result = await expandAuthor(context.result); + return context; +}; + +export const expandAuthorManyHook = async (context: HookContext): Promise<HookContext> => { + const polls = await bluebird.map(context.result, (poll: any) => expandAuthor(poll)); + context.result = _.compact(polls); + return context; +}; + |