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 => { 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 => { context.result = await expandAuthor(context.result); return context; }; const expandAuthorManyHook = async (context: HookContext): Promise => { const polls = await bluebird.map(context.result, (poll: any) => expandAuthor(poll)); context.result = _.compact(polls); return context; }; export default { after: { get: [expandAuthorHook], find: [expandAuthorManyHook] } }