diff options
Diffstat (limited to 'services')
-rw-r--r-- | services/feed/feed.class.ts | 17 | ||||
-rw-r--r-- | services/feed/feed.hooks.ts | 32 | ||||
-rw-r--r-- | services/feed/feed.service.ts | 10 | ||||
-rw-r--r-- | services/index.ts | 2 | ||||
-rw-r--r-- | services/polls/polls.hooks.ts | 6 | ||||
-rw-r--r-- | services/profiles/profiles.class.ts | 19 | ||||
-rw-r--r-- | services/profiles/profiles.hooks.ts | 8 | ||||
-rw-r--r-- | services/profiles/profiles.service.ts | 3 |
8 files changed, 81 insertions, 16 deletions
diff --git a/services/feed/feed.class.ts b/services/feed/feed.class.ts new file mode 100644 index 0000000..ceb86e6 --- /dev/null +++ b/services/feed/feed.class.ts @@ -0,0 +1,17 @@ +import { Application } from '@feathersjs/express'; +import { Params } from '@feathersjs/feathers'; +import { Poll } from 'which-types'; + + +export default class Feed { + app!: Application; + + async find(params: Params): Promise<Poll[]> { + return this.app.service('polls').find(params); + } + + setup(app: Application): void { + this.app = app; + } +} + diff --git a/services/feed/feed.hooks.ts b/services/feed/feed.hooks.ts new file mode 100644 index 0000000..54f6d61 --- /dev/null +++ b/services/feed/feed.hooks.ts @@ -0,0 +1,32 @@ +import _ from 'lodash'; +import { HookContext } from '@feathersjs/feathers'; +import { iff } from 'feathers-hooks-common'; +import isAuthenticated from '../../hooks/isAuthenticated'; + +const raiseNewVerifedPolls = async (context: HookContext): Promise<HookContext> => { + // Raise unseen verified polls to the very top + context.result = _.sortBy( + context.result, + poll => !(poll.author.verified && !poll.userChoice) + ); + return context; +}; + +const lowerOldPolls = async (context: HookContext): Promise<HookContext> => { + // Move all seen polls down + context.result = _.sortBy( + context.result, + poll => !!poll.userChoice + ); + return context; +}; + +export default { + after: { + find: [ + iff(isAuthenticated, raiseNewVerifedPolls), + iff(isAuthenticated, lowerOldPolls) + ] + } +}; + diff --git a/services/feed/feed.service.ts b/services/feed/feed.service.ts new file mode 100644 index 0000000..d326656 --- /dev/null +++ b/services/feed/feed.service.ts @@ -0,0 +1,10 @@ +import { Application } from '@feathersjs/express'; +import Feed from './feed.class'; + +import hooks from './feed.hooks'; + +export default (app: Application): void => { + app.use('/feed', new Feed()); + app.service('feed').hooks(hooks); +}; + diff --git a/services/index.ts b/services/index.ts index bdce04f..1763a17 100644 --- a/services/index.ts +++ b/services/index.ts @@ -4,6 +4,7 @@ import Polls from './polls/polls.service'; import Profiles from './profiles/profiles.service'; import Votes from './votes/votes.service'; import Auth from './auth/auth.service'; +import Feed from './feed/feed.service'; import tryAuthenticate from '../hooks/tryAuthenticate'; import logging from '../hooks/logging'; @@ -15,6 +16,7 @@ export default (app: Application): void => { app.configure(Polls); app.configure(Profiles); app.configure(Votes); + app.configure(Feed); app.hooks({ before: { diff --git a/services/polls/polls.hooks.ts b/services/polls/polls.hooks.ts index 13d6f63..77fcc7a 100644 --- a/services/polls/polls.hooks.ts +++ b/services/polls/polls.hooks.ts @@ -1,8 +1,12 @@ import convertPoll from '../../hooks/convertPoll'; +import sortByDate from '../../hooks/sortByDate'; export default { + before: { + find: sortByDate + }, after: { - all: [convertPoll] + all: convertPoll } }; diff --git a/services/profiles/profiles.class.ts b/services/profiles/profiles.class.ts index 52d6b47..3461cbc 100644 --- a/services/profiles/profiles.class.ts +++ b/services/profiles/profiles.class.ts @@ -1,9 +1,20 @@ -import { PollSchema } from '../../models/polls/poll.schema'; -import PollModel from '../../models/polls/poll.model'; +import { Application } from '@feathersjs/express'; +import { Poll } from 'which-types'; + export default class Profiles { - async get(id: string): Promise<PollSchema[]> { - return PollModel.find({ authorId: id }).lean(); + app!: Application; + + async get(id: string): Promise<Poll[]> { + return this.app.service('polls').find({ + query: { + authorId: id + } + }); + } + + setup(app: Application): void { + this.app = app; } } diff --git a/services/profiles/profiles.hooks.ts b/services/profiles/profiles.hooks.ts deleted file mode 100644 index 13d6f63..0000000 --- a/services/profiles/profiles.hooks.ts +++ /dev/null @@ -1,8 +0,0 @@ -import convertPoll from '../../hooks/convertPoll'; - -export default { - after: { - all: [convertPoll] - } -}; - diff --git a/services/profiles/profiles.service.ts b/services/profiles/profiles.service.ts index e860426..ae06cf9 100644 --- a/services/profiles/profiles.service.ts +++ b/services/profiles/profiles.service.ts @@ -1,10 +1,7 @@ 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); }; |