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

remove findListByPageIds method in obsolete-page.js and add findPageListByIds method to search.ts

yuto-oweseek 4 лет назад
Родитель
Сommit
1079e7b677

+ 0 - 22
packages/app/src/server/models/obsolete-page.js

@@ -483,28 +483,6 @@ export const getPageSchema = (crowi) => {
     return await findListFromBuilderAndViewer(builder, currentUser, showAnyoneKnowsLink, opt);
   };
 
-  pageSchema.statics.findListByPageIds = async function(ids, option = {}, shouldIncludeEmpty = false) {
-    const User = crowi.model('User');
-
-    const opt = Object.assign({}, option);
-    const builder = new this.PageQueryBuilder(this.find({ _id: { $in: ids } }), shouldIncludeEmpty);
-
-    builder.addConditionToPagenate(opt.offset, opt.limit);
-
-    // count
-    const totalCount = await builder.query.exec('count');
-
-    // find
-    builder.populateDataToList(User.USER_FIELDS_EXCEPT_CONFIDENTIAL);
-    const pages = await builder.query.clone().exec('find');
-
-    const result = {
-      pages, totalCount, offset: opt.offset, limit: opt.limit,
-    };
-    return result;
-  };
-
-
   /**
    * find pages by PageQueryBuilder
    * @param {PageQueryBuilder} builder

+ 28 - 10
packages/app/src/server/service/search.ts

@@ -15,6 +15,8 @@ import PrivateLegacyPagesDelegator from './search-delegator/private-legacy-pages
 import { PageModel } from '../models/page';
 import { serializeUserSecurely } from '../models/serializers/user-serializer';
 
+import { ObjectIdLike } from '../interfaces/mongoose-utils';
+
 // eslint-disable-next-line no-unused-vars
 const logger = loggerFactory('growi:service:search');
 
@@ -36,6 +38,31 @@ const normalizeQueryString = (_queryString: string): string => {
   return queryString;
 };
 
+const findPageListByIds = async(pageIds: ObjectIdLike[], crowi: any) => {
+
+  const Page = crowi.model('Page') as unknown as PageModel;
+  const User = crowi.model('User');
+
+  const builder = new Page.PageQueryBuilder(Page.find(({ _id: { $in: pageIds } })), false);
+
+  builder.addConditionToPagenate(undefined, undefined); // offset and limit are unnesessary
+
+  builder.populateDataToList(User.USER_FIELDS_EXCEPT_CONFIDENTIAL); // populate lastUpdateUser
+  builder.query = builder.query.populate({
+    path: 'creator',
+    select: User.USER_FIELDS_EXCEPT_CONFIDENTIAL,
+  });
+
+  const pages = await builder.query.clone().exec('find');
+  const totalCount = await builder.query.exec('count');
+
+  return {
+    pages,
+    totalCount,
+  };
+
+};
+
 class SearchService implements SearchQueryParser, SearchResolver {
 
   crowi!: any
@@ -368,22 +395,13 @@ class SearchService implements SearchQueryParser, SearchResolver {
     /*
      * Format ElasticSearch result
      */
-    const Page = this.crowi.model('Page') as unknown as PageModel;
     const User = this.crowi.model('User');
     const result = {} as IFormattedSearchResult;
 
     // get page data
     const pageIds = searchResult.data.map((page) => { return page._id });
-    const findPageResult = await Page.findListByPageIds(pageIds);
-
-    // populate creator
-    const creatorIds: string[] = findPageResult.pages.map(page => page.creator);
-    const creators = await User.find({ _id: { $in: creatorIds } });
 
-    findPageResult.pages = findPageResult.pages.map((page) => {
-      page.creator = creators.find(creator => creator._id.toString() === page.creator.toString());
-      return page;
-    });
+    const findPageResult = await findPageListByIds(pageIds, this.crowi);
 
     // set meta data
     result.meta = searchResult.meta;