summaryrefslogtreecommitdiff
path: root/src/server/api/endpoints/users/search.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/api/endpoints/users/search.ts')
-rw-r--r--src/server/api/endpoints/users/search.ts73
1 files changed, 4 insertions, 69 deletions
diff --git a/src/server/api/endpoints/users/search.ts b/src/server/api/endpoints/users/search.ts
index 95b9e4f4bb..e29c8d32f1 100644
--- a/src/server/api/endpoints/users/search.ts
+++ b/src/server/api/endpoints/users/search.ts
@@ -1,40 +1,19 @@
-/**
- * Module dependencies
- */
-import * as mongo from 'mongodb';
import $ from 'cafy';
-import User, { pack } from '../../../../models/user';
-import config from '../../../../config';
+import User, { pack, ILocalUser } from '../../../../models/user';
const escapeRegexp = require('escape-regexp');
/**
* Search a user
- *
- * @param {any} params
- * @param {any} me
- * @return {Promise<any>}
*/
-module.exports = (params, me) => new Promise(async (res, rej) => {
+module.exports = (params: any, me: ILocalUser) => new Promise(async (res, rej) => {
// Get 'query' parameter
const [query, queryError] = $.str.pipe(x => x != '').get(params.query);
if (queryError) return rej('invalid query param');
- // Get 'offset' parameter
- const [offset = 0, offsetErr] = $.num.optional().min(0).get(params.offset);
- if (offsetErr) return rej('invalid offset param');
-
// Get 'max' parameter
const [max = 10, maxErr] = $.num.optional().range(1, 30).get(params.max);
if (maxErr) return rej('invalid max param');
- // If Elasticsearch is available, search by $
- // If not, search by MongoDB
- (config.elasticsearch.enable ? byElasticsearch : byNative)
- (res, rej, me, query, offset, max);
-});
-
-// Search by MongoDB
-async function byNative(res, rej, me, query, offset, max) {
const escapedQuery = escapeRegexp(query);
// Search users
@@ -51,49 +30,5 @@ async function byNative(res, rej, me, query, offset, max) {
});
// Serialize
- res(await Promise.all(users.map(async user =>
- await pack(user, me, { detail: true }))));
-}
-
-// Search by Elasticsearch
-async function byElasticsearch(res, rej, me, query, offset, max) {
- const es = require('../../db/elasticsearch');
-
- es.search({
- index: 'misskey',
- type: 'user',
- body: {
- size: max,
- from: offset,
- query: {
- simple_query_string: {
- fields: ['username', 'name', 'bio'],
- query: query,
- default_operator: 'and'
- }
- }
- }
- }, async (error, response) => {
- if (error) {
- console.error(error);
- return res(500);
- }
-
- if (response.hits.total === 0) {
- return res([]);
- }
-
- const hits = response.hits.hits.map(hit => new mongo.ObjectID(hit._id));
-
- const users = await User
- .find({
- _id: {
- $in: hits
- }
- });
-
- // Serialize
- res(await Promise.all(users.map(async user =>
- await pack(user, me, { detail: true }))));
- });
-}
+ res(await Promise.all(users.map(user => pack(user, me, { detail: true }))));
+});