diff options
author | Eugene Sokolov <eug-vs@keemail.me> | 2020-06-12 19:32:44 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-06-12 19:32:44 +0300 |
commit | 0ecf99e2749fe60a20e86b266c6019ebb56e021a (patch) | |
tree | c3918fa3990ec31a6403df312b0a54d3566c7a94 | |
parent | 8fc9f8d09d64f3a1e5d0dac238eac6ac9629c45f (diff) | |
parent | 24ff209193448ee047f428705879cef15e0b737a (diff) | |
download | which-api-0ecf99e2749fe60a20e86b266c6019ebb56e021a.tar.gz |
Merge pull request #5 from eug-vs/profile
Create profile endpoint
-rw-r--r-- | hooks/expandAuthor.ts | 32 | ||||
-rw-r--r-- | services/index.ts | 2 | ||||
-rw-r--r-- | services/polls/polls.hooks.ts | 40 | ||||
-rw-r--r-- | services/profiles/profiles.class.ts | 9 | ||||
-rw-r--r-- | services/profiles/profiles.hooks.ts | 10 | ||||
-rw-r--r-- | services/profiles/profiles.service.ts | 10 |
6 files changed, 69 insertions, 34 deletions
diff --git a/hooks/expandAuthor.ts b/hooks/expandAuthor.ts new file mode 100644 index 0000000..1f33ff0 --- /dev/null +++ b/hooks/expandAuthor.ts @@ -0,0 +1,32 @@ +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<Poll | null> => { + return UserModel.findById(poll.authorId) + .lean<User>() + .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<HookContext> => { + context.result = await expandAuthor(context.result); + return context; +}; + +export const expandAuthorManyHook = async (context: HookContext): Promise<HookContext> => { + const polls = await bluebird.map(context.result, (poll: any) => expandAuthor(poll)); + context.result = _.compact(polls); + return context; +}; + diff --git a/services/index.ts b/services/index.ts index 441f9ad..d946e9d 100644 --- a/services/index.ts +++ b/services/index.ts @@ -1,9 +1,11 @@ import { Application } from '@feathersjs/express'; import Users from './users/users.service'; import Polls from './polls/polls.service'; +import Profiles from './profiles/profiles.service'; export default (app: Application): void => { app.configure(Users); app.configure(Polls); + app.configure(Profiles); }; diff --git a/services/polls/polls.hooks.ts b/services/polls/polls.hooks.ts index fc5fa45..0637320 100644 --- a/services/polls/polls.hooks.ts +++ b/services/polls/polls.hooks.ts @@ -1,40 +1,12 @@ -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<Poll | null> => { - return UserModel.findById(poll.authorId) - .lean<User>() - .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<HookContext> => { - context.result = await expandAuthor(context.result); - return context; -}; - -const expandAuthorManyHook = async (context: HookContext): Promise<HookContext> => { - const polls = await bluebird.map(context.result, (poll: any) => expandAuthor(poll)); - context.result = _.compact(polls); - return context; -}; - +import { + expandAuthorHook, + expandAuthorManyHook +} from '../../hooks/expandAuthor'; export default { after: { get: [expandAuthorHook], find: [expandAuthorManyHook] } -} +}; + diff --git a/services/profiles/profiles.class.ts b/services/profiles/profiles.class.ts new file mode 100644 index 0000000..8954f74 --- /dev/null +++ b/services/profiles/profiles.class.ts @@ -0,0 +1,9 @@ +import { Poll, PollSchema } from "../../models/polls/poll.schema"; +import PollModel from '../../models/polls/poll.model'; + +export default class Profiles { + async get(id: string, params: any): Promise<PollSchema[]> { + return PollModel.find({ authorId: id }).lean<Poll>(); + } +}; + diff --git a/services/profiles/profiles.hooks.ts b/services/profiles/profiles.hooks.ts new file mode 100644 index 0000000..b022aff --- /dev/null +++ b/services/profiles/profiles.hooks.ts @@ -0,0 +1,10 @@ +import { + expandAuthorManyHook, +} from '../../hooks/expandAuthor'; + +export default { + after: { + get: [expandAuthorManyHook], + } +}; + diff --git a/services/profiles/profiles.service.ts b/services/profiles/profiles.service.ts new file mode 100644 index 0000000..3422352 --- /dev/null +++ b/services/profiles/profiles.service.ts @@ -0,0 +1,10 @@ +import { Application } from "@feathersjs/express"; +import Profiles from './profiles.class'; + +import hooks from './profiles.hooks'; + +export default (app: Application): void => { + app.use('/profiles', new Profiles()); + app.service('profiles').hooks(hooks); +}; + |