aboutsummaryrefslogtreecommitdiff
path: root/hooks/convertPoll.ts
blob: aacf3de363fb5d136ab52692b2fe275100708c4d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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';


export default async (context: HookContext): Promise<HookContext> => {
  const { app, result } = context;

  const convert = async (poll: PollSchema): Promise<Poll | null> => {
    return app.service('users').get(poll.authorId)
      .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
              }
            }
          }
        );
      });
  };

  if (Array.isArray(result)) {
    const polls = await bluebird.map(result, (poll: PollSchema) => convert(poll));
    context.result = _.compact(polls);
  } else {
    context.result = await convert(result);
  }
  return context;
};