From a7e6b766be6b30b37839beb13f31d96b141cc25a Mon Sep 17 00:00:00 2001 From: syuilo Date: Fri, 2 Nov 2018 12:49:08 +0900 Subject: Resolve #2623 --- src/server/api/endpoints/users.ts | 51 +++++++++++++++++++++------------------ 1 file changed, 28 insertions(+), 23 deletions(-) (limited to 'src/server/api/endpoints/users.ts') diff --git a/src/server/api/endpoints/users.ts b/src/server/api/endpoints/users.ts index d7e85d3cbe..81751504e7 100644 --- a/src/server/api/endpoints/users.ts +++ b/src/server/api/endpoints/users.ts @@ -1,30 +1,38 @@ import $ from 'cafy'; import User, { pack, ILocalUser } from '../../../models/user'; +import getParams from '../get-params'; -/** - * Lists all users - */ -export default (params: any, me: ILocalUser) => new Promise(async (res, rej) => { - // Get 'limit' parameter - const [limit = 10, limitErr] = $.num.optional.range(1, 100).get(params.limit); - if (limitErr) return rej('invalid limit param'); +export const meta = { + requireCredential: false, + + params: { + limit: { + validator: $.num.optional.range(1, 100), + default: 10 + }, + + offset: { + validator: $.num.optional.min(0), + default: 0 + }, - // Get 'offset' parameter - const [offset = 0, offsetErr] = $.num.optional.min(0).get(params.offset); - if (offsetErr) return rej('invalid offset param'); + sort: { + validator: $.str.optional.or('+follower|-follower'), + } + } +}; - // Get 'sort' parameter - const [sort, sortError] = $.str.optional.or('+follower|-follower').get(params.sort); - if (sortError) return rej('invalid sort param'); +export default (params: any, me: ILocalUser) => new Promise(async (res, rej) => { + const [ps, psErr] = getParams(meta, params); + if (psErr) return rej(psErr); - // Construct query let _sort; - if (sort) { - if (sort == '+follower') { + if (ps.sort) { + if (ps.sort == '+follower') { _sort = { followersCount: -1 }; - } else if (sort == '-follower') { + } else if (ps.sort == '-follower') { _sort = { followersCount: 1 }; @@ -35,17 +43,14 @@ export default (params: any, me: ILocalUser) => new Promise(async (res, rej) => }; } - // Issue query const users = await User .find({ host: null }, { - limit: limit, + limit: ps.limit, sort: _sort, - skip: offset + skip: ps.offset }); - // Serialize - res(await Promise.all(users.map(async user => - await pack(user, me)))); + res(await Promise.all(users.map(user => pack(user, me)))); }); -- cgit v1.2.3-freya