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

Enabled to return sharedPage in GET /_api/v3/page

Shun Miyazawa 1 год назад
Родитель
Сommit
2c0cf9cff4
2 измененных файлов с 16 добавлено и 2 удалено
  1. 1 0
      apps/app/src/server/models/page.ts
  2. 15 2
      apps/app/src/server/routes/apiv3/page/index.ts

+ 1 - 0
apps/app/src/server/models/page.ts

@@ -50,6 +50,7 @@ export interface PageDocument extends IPage, Document<Types.ObjectId> {
   [x:string]: any // for obsolete methods
   [x:string]: any // for obsolete methods
   getLatestRevisionBodyLength(): Promise<number | null | undefined>
   getLatestRevisionBodyLength(): Promise<number | null | undefined>
   calculateAndUpdateLatestRevisionBodyLength(this: PageDocument): Promise<void>
   calculateAndUpdateLatestRevisionBodyLength(this: PageDocument): Promise<void>
+  populateDataToShowRevision(shouldExcludeBody: boolean): Promise<PageDocument>
 }
 }
 
 
 
 

+ 15 - 2
apps/app/src/server/routes/apiv3/page/index.ts

@@ -20,6 +20,7 @@ import { excludeReadOnlyUser } from '~/server/middlewares/exclude-read-only-user
 import { GlobalNotificationSettingEvent } from '~/server/models/GlobalNotificationSetting';
 import { GlobalNotificationSettingEvent } from '~/server/models/GlobalNotificationSetting';
 import type { PageDocument, PageModel } from '~/server/models/page';
 import type { PageDocument, PageModel } from '~/server/models/page';
 import { Revision } from '~/server/models/revision';
 import { Revision } from '~/server/models/revision';
+import ShareLink from '~/server/models/share-link';
 import Subscription from '~/server/models/subscription';
 import Subscription from '~/server/models/subscription';
 import { configManager } from '~/server/service/config-manager';
 import { configManager } from '~/server/service/config-manager';
 import type { IPageGrantService } from '~/server/service/page-grant';
 import type { IPageGrantService } from '~/server/service/page-grant';
@@ -202,6 +203,7 @@ module.exports = (crowi) => {
       query('pageId').optional().isString(),
       query('pageId').optional().isString(),
       query('path').optional().isString(),
       query('path').optional().isString(),
       query('findAll').optional().isBoolean(),
       query('findAll').optional().isBoolean(),
+      query('shareLinkId').optional().isMongoId(),
     ],
     ],
     likes: [
     likes: [
       body('pageId').isString(),
       body('pageId').isString(),
@@ -284,15 +286,26 @@ module.exports = (crowi) => {
    *                  $ref: '#/components/schemas/Page'
    *                  $ref: '#/components/schemas/Page'
    */
    */
   router.get('/', certifySharedPage, accessTokenParser, loginRequired, validator.getPage, apiV3FormValidator, async(req, res) => {
   router.get('/', certifySharedPage, accessTokenParser, loginRequired, validator.getPage, apiV3FormValidator, async(req, res) => {
-    const { user } = req;
+    const { user, isSharedPage } = req;
     const {
     const {
-      pageId, path, findAll, revisionId,
+      pageId, path, findAll, revisionId, shareLinkId,
     } = req.query;
     } = req.query;
 
 
     if (pageId == null && path == null) {
     if (pageId == null && path == null) {
       return res.apiv3Err(new ErrorV3('Either parameter of path or pageId is required.', 'invalid-request'));
       return res.apiv3Err(new ErrorV3('Either parameter of path or pageId is required.', 'invalid-request'));
     }
     }
 
 
+    if (isSharedPage) {
+      const shareLink = await ShareLink.findOne({ _id: shareLinkId }).populate('relatedPage');
+      if (shareLink == null) {
+        return res.apiv3Err(new ErrorV3('ShareLink is not found'), 404);
+      }
+
+      const relatedPage = await Page.findOne({ _id: getIdForRef(shareLink.relatedPage) });
+      const pagePopulateDataToShowRevision = await relatedPage?.populateDataToShowRevision(false);
+      return res.apiv3({ page: pagePopulateDataToShowRevision });
+    }
+
     let page;
     let page;
     let pages;
     let pages;
     try {
     try {