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

add types for getCreatorIdForCanDelete

Futa Arai 2 лет назад
Родитель
Сommit
7c4bc7d61a

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

@@ -79,6 +79,7 @@ export interface PageModel extends Model<PageDocument> {
     templateBody?: string,
     templateTags?: string[],
   }>
+  findNonEmptyClosestAncestor(path: string): Promise<PageDocument | undefined>
 
   PageQueryBuilder: typeof PageQueryBuilder
 

+ 1 - 1
apps/app/src/server/routes/apiv3/page-listing.ts

@@ -150,7 +150,7 @@ const routerFactory = (crowi: Crowi): Router => {
         // construct isIPageInfoForListing
         const basicPageInfo = pageService.constructBasicPageInfo(page, isGuestUser);
 
-        // TODO: use pageService.getCreatorIdForCanDelete to get creatorId (add story number)
+        // TODO: use pageService.getCreatorIdForCanDelete to get creatorId (https://redmine.weseek.co.jp/issues/140574)
         const canDeleteCompletely = pageService.canDeleteCompletely(page, page.creator, req.user, false, userRelatedGroups); // use normal delete config
 
         const pageInfo = (!isIPageInfoForEntity(basicPageInfo))

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

@@ -207,7 +207,7 @@ class PageService implements IPageService {
    */
   canDeleteCompletely(
       page: PageDocument,
-      creatorId: ObjectIdLike,
+      creatorId: ObjectIdLike | null,
       operator: any | null,
       isRecursively: boolean,
       userRelatedGroups: PopulatedGrantedGroup[],
@@ -251,18 +251,18 @@ class PageService implements IPageService {
   }
 
   // When page is empty, the 'canDelete' judgement should be done using the creator of the closest non-empty ancestor page.
-  async getCreatorIdForCanDelete(page: PageDocument): Promise<ObjectIdLike> {
+  async getCreatorIdForCanDelete(page: PageDocument): Promise<ObjectIdLike | null> {
     if (page.isEmpty) {
       const Page = mongoose.model<IPage, PageModel>('Page');
       const notEmptyClosestAncestor = await Page.findNonEmptyClosestAncestor(page.path);
-      return notEmptyClosestAncestor.creator;
+      return notEmptyClosestAncestor?.creator ?? null;
     }
 
-    return page.creator;
+    return page.creator ?? null;
   }
 
   // Use getCreatorIdForCanDelete before execution of canDelete to get creatorId.
-  canDelete(page: PageDocument, creatorId: ObjectIdLike, operator: any | null, isRecursively: boolean): boolean {
+  canDelete(page: PageDocument, creatorId: ObjectIdLike | null, operator: any | null, isRecursively: boolean): boolean {
     if (operator == null || isTopPage(page.path) || isUsersTopPage(page.path)) return false;
 
     const pageDeletionAuthority = this.crowi.configManager.getConfig('crowi', 'security:pageDeletionAuthority');
@@ -288,7 +288,7 @@ class PageService implements IPageService {
   }
 
   private canDeleteLogic(
-      creatorId: ObjectIdLike,
+      creatorId: ObjectIdLike | null,
       operator,
       isRecursively: boolean,
       authority: IPageDeleteConfigValueToProcessValidation | null,

+ 1 - 1
apps/app/src/server/service/page/page-service.ts

@@ -19,6 +19,6 @@ export interface IPageService {
   shortBodiesMapByPageIds(pageIds?: ObjectId[], user?): Promise<Record<string, string | null>>,
   constructBasicPageInfo(page: PageDocument, isGuestUser?: boolean): IPageInfo | IPageInfoForEntity,
   canDeleteCompletely(
-    page: PageDocument, creatorId: ObjectIdLike, operator: any | null, isRecursively: boolean, userRelatedGroups: PopulatedGrantedGroup[]
+    page: PageDocument, creatorId: ObjectIdLike | null, operator: any | null, isRecursively: boolean, userRelatedGroups: PopulatedGrantedGroup[]
   ): boolean,
 }