فهرست منبع

impl constructBasicPageInfo

Yuki Takei 4 سال پیش
والد
کامیت
4ea7fb5d99
2فایلهای تغییر یافته به همراه37 افزوده شده و 18 حذف شده
  1. 3 17
      packages/app/src/server/routes/apiv3/page.js
  2. 34 1
      packages/app/src/server/service/page.ts

+ 3 - 17
packages/app/src/server/routes/apiv3/page.js

@@ -365,30 +365,16 @@ module.exports = (crowi) => {
         return res.apiv3Err(`Page '${pageId}' is not found or forbidden`);
       }
 
-      if (page.isEmpty) {
-        return res.apiv3({
-          isEmpty: true,
-          isMovable: true,
-          isDeletable: false,
-          isAbleToDeleteCompletely: false,
-        });
-      }
+      const isGuestUser = !req.user;
+      const pageInfo = pageService.constructBasicPageInfo(page, isGuestUser);
 
       const bookmarkCount = await Bookmark.countByPageId(pageId);
 
       const responseBodyForGuest = {
-        isEmpty: false,
-        sumOfLikers: page.liker.length,
-        likerIds: page.liker.slice(0, 15),
-        seenUserIds: page.seenUsers.slice(0, 15),
-        sumOfSeenUsers: page.seenUsers.length,
+        ...pageInfo,
         bookmarkCount,
-        isMovable: false,
-        isDeletable: Page.isDeletableName(page.path),
-        isAbleToDeleteCompletely: false,
       };
 
-      const isGuestUser = !req.user;
       if (isGuestUser) {
         return res.apiv3(responseBodyForGuest);
       }

+ 34 - 1
packages/app/src/server/service/page.ts

@@ -1534,7 +1534,40 @@ class PageService {
     }
   }
 
-  async shortBodiesMapByPageIds(pageIds: string[] = [], user) {
+  private extractStringIds(refs: Ref<HasObjectId>[]) {
+    return refs.map((ref: Ref<HasObjectId>) => {
+      return (typeof ref === 'string') ? ref : ref._id.toString();
+    });
+  }
+
+  constructBasicPageInfo(page: IPage, isGuestUser?: boolean): IPageInfoCommon | IPageInfo {
+    if (page.isEmpty) {
+      return {
+        isEmpty: true,
+        isMovable: true,
+        isDeletable: false,
+        isAbleToDeleteCompletely: false,
+      };
+    }
+
+    const isMovable = isGuestUser ? false : !isTopPage(page.path);
+
+    const likers = page.liker.slice(0, 15) as Ref<IUserHasId>[];
+    const seenUsers = page.seenUsers.slice(0, 15) as Ref<IUserHasId>[];
+
+    const Page = this.crowi.model('Page');
+    return {
+      isEmpty: false,
+      sumOfLikers: page.liker.length,
+      likerIds: this.extractStringIds(likers),
+      seenUserIds: this.extractStringIds(seenUsers),
+      sumOfSeenUsers: page.seenUsers.length,
+      isMovable,
+      isDeletable: Page.isDeletableName(page.path),
+      isAbleToDeleteCompletely: false,
+    };
+
+  }
     const Page = mongoose.model('Page');
     const MAX_LENGTH = 350;