Refactor users query

This commit is contained in:
Chi Vinh Le
2017-08-30 18:48:20 +07:00
parent ddced5b8c9
commit ffab9ca8d5
5 changed files with 16 additions and 15 deletions
+8 -2
View File
@@ -1,6 +1,7 @@
const DataLoader = require('dataloader');
const util = require('./util');
const union = require('lodash/union');
const UsersService = require('../../services/users');
const UserModel = require('../../models/user');
@@ -26,10 +27,15 @@ const genUserByIDs = async (context, ids) => {
* @param {Object} context graph context
* @param {Object} query query terms to apply to the users query
*/
const getUsersByQuery = async ({user}, {ids, limit, cursor, statuses = null, sortOrder}) => {
const getUsersByQuery = async ({user, loaders: {Actions}}, {ids, limit, cursor, statuses, action_type, sortOrder}) => {
let query = UserModel.find();
if (action_type) {
const userIds = await Actions.getByTypes({action_type, item_type: 'USERS'});
ids = ids ? union(ids, userIds) : userIds;
}
if (ids) {
query = query.find({
id: {
@@ -38,7 +44,7 @@ const getUsersByQuery = async ({user}, {ids, limit, cursor, statuses = null, sor
});
}
if (statuses != null) {
if (statuses) {
query = query.where({
status: {
$in: statuses
+1 -7
View File
@@ -92,17 +92,11 @@ const RootQuery = {
// This endpoint is used for loading the user moderation queues (users whose username has been flagged),
// so hide it in the event that we aren't an admin.
async users(_, {query}, {user, loaders: {Users, Actions}}) {
async users(_, {query}, {user, loaders: {Users}}) {
if (user == null || !user.can(SEARCH_OTHER_USERS)) {
return null;
}
const {action_type} = query;
if (action_type) {
query.ids = await Actions.getByTypes({action_type, item_type: 'USERS'});
query.statuses = ['PENDING'];
}
return Users.getByQuery(query);
}
};
+3
View File
@@ -141,6 +141,9 @@ type UserConnection {
input UsersQuery {
action_type: ACTION_TYPE
# Current status of a user. Requires the `ADMIN` role.
statuses: [USER_STATUS!]
# Limit the number of results to be returned.
limit: Int = 10