1
0
mirror of https://gitlab.com/comunic/comunicapiv2 synced 2024-11-26 07:19:23 +00:00

Add search support

This commit is contained in:
Pierre HUBERT 2020-03-21 15:00:46 +01:00
parent 3eac46ac55
commit 75c49ee136
3 changed files with 51 additions and 0 deletions

View File

@ -135,6 +135,8 @@ export const Routes : Route[] = [
{path: "/search/user", cb: (h) => SearchController.SearchUser(h)}, {path: "/search/user", cb: (h) => SearchController.SearchUser(h)},
{path: "/user/search", cb: (h) => SearchController.SearchUser(h)}, // Legacy {path: "/user/search", cb: (h) => SearchController.SearchUser(h)}, // Legacy
{path: "/search/global", cb: (h) => SearchController.SearchGlobal(h)},
// Groups controller // Groups controller
{path: "/groups/create", cb: (h) => GroupsController.Create(h)}, {path: "/groups/create", cb: (h) => GroupsController.Create(h)},

View File

@ -1,5 +1,6 @@
import { RequestHandler } from "../entities/RequestHandler"; import { RequestHandler } from "../entities/RequestHandler";
import { UserHelper } from "../helpers/UserHelper"; import { UserHelper } from "../helpers/UserHelper";
import { GroupsHelper } from "../helpers/GroupsHelper";
/** /**
* Search controller * Search controller
@ -25,4 +26,31 @@ export class SearchController {
h.send(list); h.send(list);
} }
/**
* Perform a global search (search both groups & users)
*
* @param h Request handler
*/
public static async SearchGlobal(h: RequestHandler) {
const query = h.postString("query", 1);
const limit = 10;
const results = [];
// First, search for groups
const groups = await GroupsHelper.SearchGroup(query, limit);
groups.map((e) => ({
kind: "group",
id: e
})).forEach((el) => results.push(el));
// Then search for users
const users = await UserHelper.SearchUser(query, limit);
users.map((e) => ({
kind: "user",
id: e
})).forEach((el) => results.push(el));
h.send(results);
}
} }

View File

@ -144,6 +144,27 @@ export class GroupsHelper {
return this.DbToGroupInfo(row); return this.DbToGroupInfo(row);
} }
/**
* Search for groups
*
* @param query The query
* @param limit LImit for the search
*/
public static async SearchGroup(query: string, limit: number = 10) : Promise<Array<number>> {
const results = await DatabaseHelper.Query({
table: GROUPS_LIST_TABLE,
customWhere: "name LIKE ? AND visibility != ?",
customWhereArgs: ["%"+query+"%", GroupVisibilityLevel.SECRETE_GROUP.toString()],
limit: limit,
fields: ["id"]
});
return results.map((e) => e.id);
}
/** /**
* Update (set) group settings * Update (set) group settings
* *