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