| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- module.exports = function(crowi, app) {
- 'use strict';
- // var debug = require('debug')('growi:routes:search')
- const Page = crowi.model('Page');
- const ApiResponse = require('../util/apiResponse');
- const ApiPaginate = require('../util/apiPaginate');
- const actions = {};
- const api = (actions.api = {});
- actions.searchPage = function(req, res) {
- const keyword = req.query.q || null;
- const search = crowi.getSearcher();
- if (!search) {
- return res.json(ApiResponse.error('Configuration of ELASTICSEARCH_URI is required.'));
- }
- return res.render('search', {
- q: keyword,
- });
- };
- /**
- * @api {get} /search search page
- * @apiName Search
- * @apiGroup Search
- *
- * @apiParam {String} q keyword
- * @apiParam {String} path
- * @apiParam {String} offset
- * @apiParam {String} limit
- */
- api.search = async function(req, res) {
- const user = req.user;
- const { q: keyword = null, tree = null, type = null } = req.query;
- let paginateOpts;
- try {
- paginateOpts = ApiPaginate.parseOptionsForElasticSearch(req.query);
- }
- catch (e) {
- res.json(ApiResponse.error(e));
- }
- if (keyword === null || keyword === '') {
- return res.json(ApiResponse.error('keyword should not empty.'));
- }
- const search = crowi.getSearcher();
- if (!search) {
- return res.json(ApiResponse.error('Configuration of ELASTICSEARCH_URI is required.'));
- }
- let userGroups = [];
- if (user != null) {
- const UserGroupRelation = crowi.model('UserGroupRelation');
- userGroups = await UserGroupRelation.findAllUserGroupIdsRelatedToUser(user);
- }
- const searchOpts = { ...paginateOpts, type };
- const result = {};
- try {
- let esResult;
- if (tree) {
- esResult = await search.searchKeywordUnderPath(keyword, tree, user, userGroups, searchOpts);
- }
- else {
- esResult = await search.searchKeyword(keyword, user, userGroups, searchOpts);
- }
- const findResult = await Page.findListByPageIds(esResult.data);
- result.meta = esResult.meta;
- result.totalCount = findResult.totalCount;
- result.data = findResult.pages
- .map(page => {
- page.bookmarkCount = (page._source && page._source.bookmark_count) || 0;
- return page;
- });
- }
- catch (err) {
- return res.json(ApiResponse.error(err));
- }
- return res.json(ApiResponse.success(result));
- };
- return actions;
- };
|