diff options
| author | syuilo <syuilotan@yahoo.co.jp> | 2017-03-03 07:47:14 +0900 |
|---|---|---|
| committer | syuilo <syuilotan@yahoo.co.jp> | 2017-03-03 07:47:14 +0900 |
| commit | 0926d5b6da68be6c9375addbd3cec8545185dea7 (patch) | |
| tree | 7e88d0ba7a3b663844e401071a588f1d0f50e918 /src/api/endpoints/users/recommendation.ts | |
| parent | Refactor (diff) | |
| download | sharkey-0926d5b6da68be6c9375addbd3cec8545185dea7.tar.gz sharkey-0926d5b6da68be6c9375addbd3cec8545185dea7.tar.bz2 sharkey-0926d5b6da68be6c9375addbd3cec8545185dea7.zip | |
wip
Diffstat (limited to 'src/api/endpoints/users/recommendation.ts')
| -rw-r--r-- | src/api/endpoints/users/recommendation.ts | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/src/api/endpoints/users/recommendation.ts b/src/api/endpoints/users/recommendation.ts new file mode 100644 index 0000000000..c37ae4c978 --- /dev/null +++ b/src/api/endpoints/users/recommendation.ts @@ -0,0 +1,48 @@ +'use strict'; + +/** + * Module dependencies + */ +import it from '../../it'; +import User from '../../models/user'; +import serialize from '../../serializers/user'; +import getFriends from '../../common/get-friends'; + +/** + * Get recommended users + * + * @param {any} params + * @param {any} me + * @return {Promise<any>} + */ +module.exports = (params, me) => + new Promise(async (res, rej) => +{ + // Get 'limit' parameter + const [limit, limitErr] = it(params.limit).expect.number().range(1, 100).default(10).qed(); + if (limitErr) return rej('invalid limit param'); + + // Get 'offset' parameter + const [offset, offsetErr] = it(params.offset).expect.number().min(0).default(0).qed(); + if (offsetErr) return rej('invalid offset param'); + + // ID list of the user itself and other users who the user follows + const followingIds = await getFriends(me._id); + + const users = await User + .find({ + _id: { + $nin: followingIds + } + }, { + limit: limit, + skip: offset, + sort: { + followers_count: -1 + } + }); + + // Serialize + res(await Promise.all(users.map(async user => + await serialize(user, me, { detail: true })))); +}); |