From 0926d5b6da68be6c9375addbd3cec8545185dea7 Mon Sep 17 00:00:00 2001 From: syuilo Date: Fri, 3 Mar 2017 07:47:14 +0900 Subject: wip --- src/api/endpoints/users/recommendation.ts | 48 +++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 src/api/endpoints/users/recommendation.ts (limited to 'src/api/endpoints/users/recommendation.ts') 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} + */ +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 })))); +}); -- cgit v1.2.3-freya