From 709416b125f7099b34686ea8c1d35cf7328a19e8 Mon Sep 17 00:00:00 2001 From: eug-vs Date: Wed, 10 Jun 2020 18:43:09 +0300 Subject: feat: add expandAuthor hook to polls --- services/polls/polls.hooks.ts | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 services/polls/polls.hooks.ts (limited to 'services/polls/polls.hooks.ts') 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 { + author: UserSchema; +} + +const expandAuthor = async (poll: PollSchema): Promise => { + 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 => { + context.result = await expandAuthor(context.result); + return context; +}; + +const expandAuthorManyHook = async (context: HookContext): Promise => { + context.result = await bluebird.map(context.result, (poll: any) => expandAuthor(poll)); + console.log(context.result); + return context; +}; + + +export default { + after: { + get: [expandAuthorHook], + find: [expandAuthorManyHook] + } +} -- cgit v1.2.3 From d40f6e6cf8150f9e112d0b5d8d7075c2fc90264b Mon Sep 17 00:00:00 2001 From: eug-vs Date: Wed, 10 Jun 2020 19:47:48 +0300 Subject: refactor: improve interfaces and expandAuthor --- services/polls/polls.hooks.ts | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) (limited to 'services/polls/polls.hooks.ts') diff --git a/services/polls/polls.hooks.ts b/services/polls/polls.hooks.ts index ff6a83f..fc5fa45 100644 --- a/services/polls/polls.hooks.ts +++ b/services/polls/polls.hooks.ts @@ -2,20 +2,22 @@ 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 { Poll, PollSchema } from '../../models/polls/poll.schema'; +import { User } from '../../models/users/user.schema'; import UserModel from '../../models/users/user.model'; -interface Poll extends Omit { - author: UserSchema; -} - const expandAuthor = async (poll: PollSchema): Promise => { - return UserModel.findById(poll.authorId).then((author: UserSchema | null): Poll | null => { - if (author) return _.merge(_.omit(poll, 'authorId'), { author }); - return null; - }); + return UserModel.findById(poll.authorId) + .lean() + .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 => { @@ -24,8 +26,8 @@ const expandAuthorHook = async (context: HookContext): Promise => { }; const expandAuthorManyHook = async (context: HookContext): Promise => { - context.result = await bluebird.map(context.result, (poll: any) => expandAuthor(poll)); - console.log(context.result); + const polls = await bluebird.map(context.result, (poll: any) => expandAuthor(poll)); + context.result = _.compact(polls); return context; }; -- cgit v1.2.3