From 24376076e0b2c37baaf196f0664078840aeec91b Mon Sep 17 00:00:00 2001 From: eug-vs Date: Fri, 26 Jun 2020 22:12:37 +0300 Subject: feat: sort polls by date (newest on top) --- services/polls/polls.hooks.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'services') diff --git a/services/polls/polls.hooks.ts b/services/polls/polls.hooks.ts index 13d6f63..524eaee 100644 --- a/services/polls/polls.hooks.ts +++ b/services/polls/polls.hooks.ts @@ -1,6 +1,16 @@ +import _ from 'lodash'; +import { HookContext } from '@feathersjs/feathers'; import convertPoll from '../../hooks/convertPoll'; +const sort = async (context: HookContext): Promise => { + _.set(context, 'params.query.$sort', { createdAt: - 1}); + return context; +} + export default { + before: { + find: sort + }, after: { all: [convertPoll] } -- cgit v1.2.3 From 9a488369a481d92fed348df3de71bf612c4183d5 Mon Sep 17 00:00:00 2001 From: eug-vs Date: Sat, 27 Jun 2020 00:18:32 +0300 Subject: feat: create feed service --- services/feed/feed.class.ts | 27 +++++++++++++++++++++++++++ services/feed/feed.service.ts | 7 +++++++ services/index.ts | 2 ++ 3 files changed, 36 insertions(+) create mode 100644 services/feed/feed.class.ts create mode 100644 services/feed/feed.service.ts (limited to 'services') diff --git a/services/feed/feed.class.ts b/services/feed/feed.class.ts new file mode 100644 index 0000000..8c7cd0b --- /dev/null +++ b/services/feed/feed.class.ts @@ -0,0 +1,27 @@ +import _ from 'lodash'; +import { Application } from '@feathersjs/express'; +import { Params } from '@feathersjs/feathers'; +import { Poll } from 'which-types'; + +import { PollSchema } from '../../models/polls/poll.schema'; +import PollModel from '../../models/polls/poll.model'; + + +export default class Feed { + app!: Application; + + async find(params: Params): Promise { + return this.app.service('polls') + .find(params) + .then( // Move new verified polls on top + (polls: Poll[]) => _.sortBy(polls, poll => poll.author.verified && !poll.userChoice) + ).then( // But all seen posts go down + (polls: Poll[]) => _.sortBy(polls, poll => !!poll.userChoice) + ); + } + + setup (app: Application) { + this.app = app; + } +} + diff --git a/services/feed/feed.service.ts b/services/feed/feed.service.ts new file mode 100644 index 0000000..f641425 --- /dev/null +++ b/services/feed/feed.service.ts @@ -0,0 +1,7 @@ +import { Application } from '@feathersjs/express'; +import Feed from './feed.class'; + +export default (app: Application): void => { + app.use('/feed', new Feed()); +}; + 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: { -- cgit v1.2.3 From 0a78ac48ed5ae37f88e5f36194953424a5bc18a0 Mon Sep 17 00:00:00 2001 From: eug-vs Date: Sat, 27 Jun 2020 00:53:48 +0300 Subject: refactor: move sortByDate hook to global hooks --- services/polls/polls.hooks.ts | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) (limited to 'services') diff --git a/services/polls/polls.hooks.ts b/services/polls/polls.hooks.ts index 524eaee..77fcc7a 100644 --- a/services/polls/polls.hooks.ts +++ b/services/polls/polls.hooks.ts @@ -1,18 +1,12 @@ -import _ from 'lodash'; -import { HookContext } from '@feathersjs/feathers'; import convertPoll from '../../hooks/convertPoll'; - -const sort = async (context: HookContext): Promise => { - _.set(context, 'params.query.$sort', { createdAt: - 1}); - return context; -} +import sortByDate from '../../hooks/sortByDate'; export default { before: { - find: sort + find: sortByDate }, after: { - all: [convertPoll] + all: convertPoll } }; -- cgit v1.2.3 From 7c2d12b4f809563cc08e86229359251674b745ce Mon Sep 17 00:00:00 2001 From: eug-vs Date: Sat, 27 Jun 2020 01:17:42 +0300 Subject: refactor: improve Feed service --- services/feed/feed.class.ts | 12 +----------- services/feed/feed.hooks.ts | 28 ++++++++++++++++++++++++++++ services/feed/feed.service.ts | 3 +++ 3 files changed, 32 insertions(+), 11 deletions(-) create mode 100644 services/feed/feed.hooks.ts (limited to 'services') diff --git a/services/feed/feed.class.ts b/services/feed/feed.class.ts index 8c7cd0b..3a2ffe4 100644 --- a/services/feed/feed.class.ts +++ b/services/feed/feed.class.ts @@ -1,23 +1,13 @@ -import _ from 'lodash'; import { Application } from '@feathersjs/express'; import { Params } from '@feathersjs/feathers'; import { Poll } from 'which-types'; -import { PollSchema } from '../../models/polls/poll.schema'; -import PollModel from '../../models/polls/poll.model'; - export default class Feed { app!: Application; async find(params: Params): Promise { - return this.app.service('polls') - .find(params) - .then( // Move new verified polls on top - (polls: Poll[]) => _.sortBy(polls, poll => poll.author.verified && !poll.userChoice) - ).then( // But all seen posts go down - (polls: Poll[]) => _.sortBy(polls, poll => !!poll.userChoice) - ); + return this.app.service('polls').find(params); } setup (app: Application) { diff --git a/services/feed/feed.hooks.ts b/services/feed/feed.hooks.ts new file mode 100644 index 0000000..0e201db --- /dev/null +++ b/services/feed/feed.hooks.ts @@ -0,0 +1,28 @@ +import _ from 'lodash'; +import { HookContext } from '@feathersjs/feathers'; + + +const raiseNewVerifedPolls = async (context: HookContext): Promise => { + // 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 => { + // Move all seen polls down + context.result = _.sortBy( + context.result, + poll => !!poll.userChoice + ); + return context; +}; + +export default { + after: { + find: [raiseNewVerifedPolls, lowerOldPolls] + } +}; + diff --git a/services/feed/feed.service.ts b/services/feed/feed.service.ts index f641425..d326656 100644 --- a/services/feed/feed.service.ts +++ b/services/feed/feed.service.ts @@ -1,7 +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); }; -- cgit v1.2.3 From d7d65bbde562519f6a78d90b8ca11a3bdd0420a1 Mon Sep 17 00:00:00 2001 From: eug-vs Date: Sat, 27 Jun 2020 01:24:25 +0300 Subject: refactor: simplify profile service --- services/profiles/profiles.class.ts | 19 +++++++++++++++---- services/profiles/profiles.hooks.ts | 8 -------- services/profiles/profiles.service.ts | 3 --- 3 files changed, 15 insertions(+), 15 deletions(-) delete mode 100644 services/profiles/profiles.hooks.ts (limited to 'services') diff --git a/services/profiles/profiles.class.ts b/services/profiles/profiles.class.ts index 52d6b47..564e2a6 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 { - return PollModel.find({ authorId: id }).lean(); + app!: Application; + + async get(id: string): Promise { + return this.app.service('polls').find({ + query: { + authorId: id + } + }); + } + + setup (app: Application) { + 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); }; -- cgit v1.2.3 From a8c74bf2c5b8a8cc0bfd0f1d082eb3bf8357f6bc Mon Sep 17 00:00:00 2001 From: eug-vs Date: Sat, 27 Jun 2020 01:26:03 +0300 Subject: style: fix linting errors --- services/feed/feed.class.ts | 2 +- services/profiles/profiles.class.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'services') diff --git a/services/feed/feed.class.ts b/services/feed/feed.class.ts index 3a2ffe4..ceb86e6 100644 --- a/services/feed/feed.class.ts +++ b/services/feed/feed.class.ts @@ -10,7 +10,7 @@ export default class Feed { return this.app.service('polls').find(params); } - setup (app: Application) { + setup(app: Application): void { this.app = app; } } diff --git a/services/profiles/profiles.class.ts b/services/profiles/profiles.class.ts index 564e2a6..3461cbc 100644 --- a/services/profiles/profiles.class.ts +++ b/services/profiles/profiles.class.ts @@ -13,7 +13,7 @@ export default class Profiles { }); } - setup (app: Application) { + setup(app: Application): void { this.app = app; } } -- cgit v1.2.3 From 8f5f077c318e9b466cc47ebab548ea0cd69052f0 Mon Sep 17 00:00:00 2001 From: eug-vs Date: Sat, 27 Jun 2020 16:26:21 +0300 Subject: feat: only modify polls order for authorized users --- services/feed/feed.hooks.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'services') diff --git a/services/feed/feed.hooks.ts b/services/feed/feed.hooks.ts index 0e201db..33c6e71 100644 --- a/services/feed/feed.hooks.ts +++ b/services/feed/feed.hooks.ts @@ -1,6 +1,7 @@ import _ from 'lodash'; import { HookContext } from '@feathersjs/feathers'; - +import { iff, combine } from 'feathers-hooks-common'; +import isAuthenticated from '../../hooks/isAuthenticated'; const raiseNewVerifedPolls = async (context: HookContext): Promise => { // Raise unseen verified polls to the very top @@ -22,7 +23,10 @@ const lowerOldPolls = async (context: HookContext): Promise => { export default { after: { - find: [raiseNewVerifedPolls, lowerOldPolls] + find: [ + iff(isAuthenticated, raiseNewVerifedPolls), + iff(isAuthenticated, lowerOldPolls), + ] } }; -- cgit v1.2.3 From 0a6a6be1b43635c60e76669ac2a7ee8581d9b183 Mon Sep 17 00:00:00 2001 From: eug-vs Date: Sat, 27 Jun 2020 16:40:07 +0300 Subject: style: fix linting errors --- services/feed/feed.hooks.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'services') diff --git a/services/feed/feed.hooks.ts b/services/feed/feed.hooks.ts index 33c6e71..54f6d61 100644 --- a/services/feed/feed.hooks.ts +++ b/services/feed/feed.hooks.ts @@ -1,6 +1,6 @@ import _ from 'lodash'; import { HookContext } from '@feathersjs/feathers'; -import { iff, combine } from 'feathers-hooks-common'; +import { iff } from 'feathers-hooks-common'; import isAuthenticated from '../../hooks/isAuthenticated'; const raiseNewVerifedPolls = async (context: HookContext): Promise => { @@ -25,7 +25,7 @@ export default { after: { find: [ iff(isAuthenticated, raiseNewVerifedPolls), - iff(isAuthenticated, lowerOldPolls), + iff(isAuthenticated, lowerOldPolls) ] } }; -- cgit v1.2.3