From e99b51895afd532a529744396ecae87d47c68503 Mon Sep 17 00:00:00 2001 From: eug-vs Date: Sun, 21 Jun 2020 14:29:59 +0300 Subject: feat: change hooks and install which-types --- hooks/convertPoll.ts | 45 +++++++++++++++++++++++++++++++++++++++++++++ hooks/expandAuthor.ts | 45 --------------------------------------------- 2 files changed, 45 insertions(+), 45 deletions(-) create mode 100644 hooks/convertPoll.ts delete mode 100644 hooks/expandAuthor.ts (limited to 'hooks') diff --git a/hooks/convertPoll.ts b/hooks/convertPoll.ts new file mode 100644 index 0000000..62ddea1 --- /dev/null +++ b/hooks/convertPoll.ts @@ -0,0 +1,45 @@ +import { HookContext } from '@feathersjs/feathers'; +import bluebird from 'bluebird'; +import _ from 'lodash'; +import { Poll, User } from 'which-types'; + +import { PollSchema } from '../models/polls/poll.schema'; +import UserModel from '../models/users/user.model'; + +const convertPoll = async (poll: PollSchema): Promise => { + return UserModel.findById(poll.authorId) + .lean() + .exec() + .then((author: User | null): Poll | null => { + return author && _.merge( + _.omit(poll, ['authorId']), + { + author, + contents: { + left: { + votes: poll.contents.left.votes.length + }, + right: { + votes: poll.contents.right.votes.length + } + } + } + ); + }) + .catch(err => { + console.error(err); + return err; + }); +}; + +export const convertPollHook = async (context: HookContext): Promise => { + context.result = await convertPoll(context.result); + return context; +}; + +export const convertPollManyHook = async (context: HookContext): Promise => { + const polls = await bluebird.map(context.result, (poll: PollSchema) => convertPoll(poll)); + context.result = _.compact(polls); + return context; +}; + diff --git a/hooks/expandAuthor.ts b/hooks/expandAuthor.ts deleted file mode 100644 index 5993839..0000000 --- a/hooks/expandAuthor.ts +++ /dev/null @@ -1,45 +0,0 @@ -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 convertPoll = async (poll: PollSchema): Promise => { - return UserModel.findById(poll.authorId) - .lean() - .exec() - .then((author: User | null): Poll | null => { - return author && { - _id: poll._id, - author, - contents: { - left: { - url: poll.contents.left.url, - votes: poll.contents.left.votes.length - }, - right: { - url: poll.contents.right.url, - votes: poll.contents.right.votes.length - } - } - }; - }) - .catch(err => { - console.error(err); - return err; - }); -}; - -export const expandAuthorHook = async (context: HookContext): Promise => { - context.result = await convertPoll(context.result); - return context; -}; - -export const expandAuthorManyHook = async (context: HookContext): Promise => { - const polls = await bluebird.map(context.result, (poll: PollSchema) => convertPoll(poll)); - context.result = _.compact(polls); - return context; -}; - -- cgit v1.2.3