Kaynağa Gözat

fix: enhance findPageAndMetaDataByViewer by externalizing page service methods

Shun Miyazawa 3 ay önce
ebeveyn
işleme
b4d52cede6

+ 19 - 8
apps/app/src/server/service/page/find-page-and-meta-data-by-viewer.ts

@@ -15,10 +15,15 @@ import mongoose from 'mongoose';
 
 
 import type { BookmarkedPage } from '~/interfaces/bookmark-info';
 import type { BookmarkedPage } from '~/interfaces/bookmark-info';
 import type { PageDocument, PageModel } from '~/server/models/page';
 import type { PageDocument, PageModel } from '~/server/models/page';
+import type { IPageGrantService } from '~/server/service/page-grant';
 
 
 import Subscription from '../../models/subscription';
 import Subscription from '../../models/subscription';
+import type { IPageService } from './page-service';
 
 
 export async function findPageAndMetaDataByViewer(
 export async function findPageAndMetaDataByViewer(
+  pageService: IPageService,
+  pageGrantService: IPageGrantService,
+
   pageId: string | null, // either pageId or path must be specified
   pageId: string | null, // either pageId or path must be specified
   path: string | null, // either pageId or path must be specified
   path: string | null, // either pageId or path must be specified
   user?: HydratedDocument<IUser>,
   user?: HydratedDocument<IUser>,
@@ -58,7 +63,7 @@ export async function findPageAndMetaDataByViewer(
   }
   }
 
 
   const isGuestUser = user == null;
   const isGuestUser = user == null;
-  const basicPageInfo = this.constructBasicPageInfo(page, isGuestUser);
+  const basicPageInfo = pageService.constructBasicPageInfo(page, isGuestUser);
 
 
   if (isSharedPage) {
   if (isSharedPage) {
     return {
     return {
@@ -98,10 +103,9 @@ export async function findPageAndMetaDataByViewer(
     };
     };
   }
   }
 
 
-  const creatorId = await this.getCreatorIdForCanDelete(page);
+  const creatorId = await pageService.getCreatorIdForCanDelete(page);
 
 
-  const userRelatedGroups =
-    await this.pageGrantService.getUserRelatedGroups(user);
+  const userRelatedGroups = await pageGrantService.getUserRelatedGroups(user);
 
 
   const canDeleteUserHomepage = await (async () => {
   const canDeleteUserHomepage = await (async () => {
     // Not a user homepage
     // Not a user homepage
@@ -109,19 +113,26 @@ export async function findPageAndMetaDataByViewer(
       return true;
       return true;
     }
     }
 
 
-    if (!this.canDeleteUserHomepageByConfig()) {
+    if (!pageService.canDeleteUserHomepageByConfig()) {
       return false;
       return false;
     }
     }
 
 
-    return await this.isUsersHomepageOwnerAbsent(page.path);
+    return await pageService.isUsersHomepageOwnerAbsent(page.path);
   })();
   })();
 
 
   const isDeletable =
   const isDeletable =
-    canDeleteUserHomepage && this.canDelete(page, creatorId, user, false);
+    canDeleteUserHomepage &&
+    pageService.canDelete(page, creatorId, user, false);
 
 
   const isAbleToDeleteCompletely =
   const isAbleToDeleteCompletely =
     canDeleteUserHomepage &&
     canDeleteUserHomepage &&
-    this.canDeleteCompletely(page, creatorId, user, false, userRelatedGroups); // use normal delete config
+    pageService.canDeleteCompletely(
+      page,
+      creatorId,
+      user,
+      false,
+      userRelatedGroups,
+    ); // use normal delete config
 
 
   const isBookmarked: boolean = isGuestUser
   const isBookmarked: boolean = isGuestUser
     ? false
     ? false

+ 6 - 0
apps/app/src/server/service/page/page-service.ts

@@ -212,4 +212,10 @@ export interface IPageService {
     options: IOptionsForCreate,
     options: IOptionsForCreate,
     pageOpId: ObjectIdLike,
     pageOpId: ObjectIdLike,
   ): Promise<void>;
   ): Promise<void>;
+
+  getCreatorIdForCanDelete(page: PageDocument): Promise<ObjectIdLike | null>;
+
+  canDeleteUserHomepageByConfig(): boolean;
+
+  isUsersHomepageOwnerAbsent(path: string): Promise<boolean>;
 }
 }