Просмотр исходного кода

Fixed interfaces for resolver & parser

Taichi Masuyama 4 лет назад
Родитель
Сommit
dee6089eea

+ 1 - 1
packages/app/src/server/interfaces/search.ts

@@ -17,7 +17,7 @@ export type QueryTerms = {
 export type ParsedQuery = { queryString: string, terms: QueryTerms, delegatorName?: string }
 
 export interface SearchQueryParser {
-  parseSearchQuery(queryString: string): Promise<ParsedQuery>
+  parseSearchQuery(queryString: string, nqString: string | null): Promise<ParsedQuery>
 }
 
 export interface SearchResolver {

+ 2 - 2
packages/app/src/server/routes/search.js

@@ -147,8 +147,8 @@ module.exports = function(crowi, app) {
     let delegatorName;
     try {
       const keyword = decodeURIComponent(q);
-      const nqString = decodeURIComponent(nq);
-      [searchResult, delegatorName] = await searchService.searchKeyword(keyword, nqString, user, userGroups, searchOpts); // TODOT:
+      const nqString = nq ?? decodeURIComponent(nq);
+      [searchResult, delegatorName] = await searchService.searchKeyword(keyword, nqString, user, userGroups, searchOpts);
     }
     catch (err) {
       logger.error('Failed to search', err);

+ 6 - 4
packages/app/src/server/service/search.ts

@@ -219,8 +219,10 @@ class SearchService implements SearchQueryParser, SearchResolver {
     return this.fullTextSearchDelegator.rebuildIndex();
   }
 
-  async parseSearchQuery(_queryString: string): Promise<ParsedQuery> {
-    const queryString = normalizeQueryString(_queryString);
+  // TODO: https://redmine.weseek.co.jp/issues/92049 Parse nqString as well
+  async parseSearchQuery(queryString: string, nqString: string | null): Promise<ParsedQuery> {
+    // eslint-disable-next-line no-param-reassign
+    queryString = normalizeQueryString(queryString);
 
     // when Normal Query
     if (!nqStringRegExp.test(queryString)) {
@@ -260,11 +262,11 @@ class SearchService implements SearchQueryParser, SearchResolver {
     return [nqDeledator, data];
   }
 
-  async searchKeyword(keyword: string, user, userGroups, searchOpts): Promise<[ISearchResult<unknown>, string | null]> {
+  async searchKeyword(keyword: string, nqString: string | null, user, userGroups, searchOpts): Promise<[ISearchResult<unknown>, string | null]> {
     let parsedQuery: ParsedQuery;
     // parse
     try {
-      parsedQuery = await this.parseSearchQuery(keyword);
+      parsedQuery = await this.parseSearchQuery(keyword, nqString);
     }
     catch (err) {
       logger.error('Error occurred while parseSearchQuery', err);

+ 4 - 0
packages/app/test/integration/service/search/search-service.test.js

@@ -1,3 +1,7 @@
+/*
+ * !! TODO: https://redmine.weseek.co.jp/issues/92050 Fix & adjust test !!
+ */
+
 import mongoose from 'mongoose';
 
 import SearchService from '~/server/service/search';