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

modified the subscription file as well as page.ts

Shunm634-source 3 лет назад
Родитель
Сommit
739f3a51fe

+ 16 - 0
packages/app/src/interfaces/subscription.ts

@@ -1,6 +1,22 @@
+import { Ref } from 'react';
+
+import { IPage } from './page';
+import { IUser } from './user';
+
 export const SubscriptionStatusType = {
   SUBSCRIBE: 'SUBSCRIBE',
   UNSUBSCRIBE: 'UNSUBSCRIBE',
 } as const;
 export const AllSubscriptionStatusType = Object.values(SubscriptionStatusType);
 export type SubscriptionStatusType = typeof SubscriptionStatusType[keyof typeof SubscriptionStatusType];
+
+export interface ISubscription {
+  user: Ref<IUser>
+  targetModel: string
+  target: Ref<IPage>
+  status: string
+  createdAt: Date
+
+  isSubscribing(): boolean
+  isUnsubscribing(): boolean
+}

+ 13 - 21
packages/app/src/server/models/subscription.ts

@@ -1,32 +1,24 @@
+import { Ref } from 'react';
+
 import { getOrCreateModel } from '@growi/core';
 import {
   Types, Document, Model, Schema,
 } from 'mongoose';
 
 import { AllSupportedTargetModels } from '~/interfaces/activity';
-import { SubscriptionStatusType, AllSubscriptionStatusType } from '~/interfaces/subscription';
-
-
-export interface ISubscription {
-  user: Types.ObjectId
-  targetModel: string
-  target: Types.ObjectId | Document
-  status: string
-  createdAt: Date
-
-  isSubscribing(): boolean
-  isUnsubscribing(): boolean
-}
+import { IPage } from '~/interfaces/page';
+import { SubscriptionStatusType, AllSubscriptionStatusType, ISubscription } from '~/interfaces/subscription';
+import { IUser } from '~/interfaces/user';
 
 export interface SubscriptionDocument extends ISubscription, Document {}
 
 export interface SubscriptionModel extends Model<SubscriptionDocument> {
   findByUserIdAndTargetId(userId: Types.ObjectId | string, targetId: Types.ObjectId | string): any
-  upsertSubscription(user: Types.ObjectId, targetModel: string, target: Types.ObjectId, status: string): any
-  subscribeByPageId(user: Types.ObjectId, pageId: Types.ObjectId, status: string): any
-  getSubscription(target: Types.ObjectId | Document): Promise<Types.ObjectId[]>
-  getUnsubscription(target: Types.ObjectId | Document): Promise<Types.ObjectId[]>
-  getSubscriptions(targets: Types.ObjectId[] | Document[]): Promise<Types.ObjectId[]>
+  upsertSubscription(user: Ref<IUser>, targetModel: string, target: Ref<IPage>, status: string): any
+  subscribeByPageId(user: Ref<IUser>, pageId: Types.ObjectId, status: string): any
+  getSubscription(target: Ref<IPage>): Promise<Ref<IUser>[]>
+  getUnsubscription(target: Ref<IPage>): Promise<Ref<IUser>[]>
+  getSubscriptions(targets: Ref<IPage>[]): Promise<Ref<IUser>[]>
 }
 
 const subscriptionSchema = new Schema<SubscriptionDocument, SubscriptionModel>({
@@ -80,15 +72,15 @@ subscriptionSchema.statics.subscribeByPageId = function(user, pageId, status) {
   return this.upsertSubscription(user, 'Page', pageId, status);
 };
 
-subscriptionSchema.statics.getSubscription = async function(target: Types.ObjectId | Document) {
+subscriptionSchema.statics.getSubscription = async function(target: Ref<IPage>) {
   return this.find({ target, status: SubscriptionStatusType.SUBSCRIBE }).distinct('user');
 };
 
-subscriptionSchema.statics.getUnsubscription = async function(target: Types.ObjectId | Document) {
+subscriptionSchema.statics.getUnsubscription = async function(target: Ref<IPage>) {
   return this.find({ target, status: SubscriptionStatusType.UNSUBSCRIBE }).distinct('user');
 };
 
-subscriptionSchema.statics.getSubscriptions = async function(targets: Document[] | Types.ObjectId[]) {
+subscriptionSchema.statics.getSubscriptions = async function(targets: Ref<IPage>[]) {
   return this.find({ $in: targets, status: SubscriptionStatusType.SUBSCRIBE }).distinct('user');
 };
 

+ 0 - 78
packages/app/src/server/service/page.ts

@@ -25,7 +25,6 @@ import { createBatchStream } from '~/server/util/batch-stream';
 import loggerFactory from '~/utils/logger';
 import { prepareDeleteConfigValuesForCalc } from '~/utils/page-delete-config';
 
-import PageEvent from '../events/page';
 import { ObjectIdLike } from '../interfaces/mongoose-utils';
 import { PathAlreadyExistsError } from '../models/errors';
 import PageOperation, { PageActionStage, PageActionType, PageOperationDocument } from '../models/page-operation';
@@ -132,26 +131,11 @@ class PageService {
 
   crowi: any;
 
-  pageEvent: any;
-
   tagEvent: any;
 
   constructor(crowi) {
     this.crowi = crowi;
-    this.pageEvent = crowi.event('page');
     this.tagEvent = crowi.event('tag');
-
-    // init
-    this.initPageEvent();
-  }
-
-  private initPageEvent() {
-    // create
-    this.pageEvent.on('create', this.pageEvent.onCreate);
-
-    // createMany
-    this.pageEvent.on('createMany', this.pageEvent.onCreateMany);
-    this.pageEvent.on('addSeenUsers', this.pageEvent.onAddSeenUsers);
   }
 
   canDeleteCompletely(path: string, creatorId: ObjectIdLike, operator: any | null, isRecursively: boolean): boolean {
@@ -468,7 +452,6 @@ class PageService {
       update.updatedAt = new Date();
     }
     const renamedPage = await Page.findByIdAndUpdate(page._id, { $set: update }, { new: true });
-    this.pageEvent.emit('rename', page, user);
 
     // 5.increase parent's descendantCount.
     // see: https://dev.growi.org/62149d019311629d4ecd91cf#Handling%20of%20descendantCount%20in%20case%20of%20unexpected%20process%20interruption
@@ -660,8 +643,6 @@ class PageService {
       await PageRedirect.create({ fromPath: page.path, toPath: newPagePath });
     }
 
-    this.pageEvent.emit('rename');
-
     return renamedPage;
   }
 
@@ -736,7 +717,6 @@ class PageService {
       }
     }
 
-    this.pageEvent.emit('updateMany', pages, user);
   }
 
   private async renameDescendantsV4(pages, user, options, oldPagePathPrefix, newPagePathPrefix) {
@@ -788,8 +768,6 @@ class PageService {
         throw Error(`Failed to create PageRedirect documents: ${err}`);
       }
     }
-
-    this.pageEvent.emit('updateMany', pages, user);
   }
 
   private async renameDescendantsWithStream(targetPage, newPagePath, user, options = {}, shouldUseV4Process = true) {
@@ -805,8 +783,6 @@ class PageService {
     const pathRegExp = new RegExp(`^${escapeStringRegexp(targetPage.path)}`, 'i');
 
     const renameDescendants = this.renameDescendants.bind(this);
-    const pageEvent = this.pageEvent;
-    let descendantPages: PageDocument[] = [];
     let count = 0;
     const writeStream = new Writable({
       objectMode: true,
@@ -816,7 +792,6 @@ class PageService {
           await renameDescendants(
             batch, user, options, pathRegExp, newPagePathPrefix, shouldUseV4Process,
           );
-          descendantPages = descendantPages.concat(batch);
           logger.debug(`Renaming pages progressing: (count=${count})`);
         }
         catch (err) {
@@ -830,8 +805,6 @@ class PageService {
 
         // update path
         targetPage.path = newPagePath;
-        pageEvent.emit('syncDescendantsUpdate', targetPage, user);
-
         callback();
       },
     });
@@ -841,7 +814,6 @@ class PageService {
       .pipe(writeStream);
 
     await streamToPromise(writeStream);
-    this.pageEvent.emit('rename', targetPage, user, descendantPages);
   }
 
   private async renameDescendantsWithStreamV4(targetPage, newPagePath, user, options = {}) {
@@ -852,7 +824,6 @@ class PageService {
     const pathRegExp = new RegExp(`^${escapeStringRegexp(targetPage.path)}`, 'i');
 
     const renameDescendants = this.renameDescendants.bind(this);
-    const pageEvent = this.pageEvent;
     let count = 0;
     const writeStream = new Writable({
       objectMode: true,
@@ -872,7 +843,6 @@ class PageService {
         logger.debug(`Renaming pages has completed: (totalCount=${count})`);
         // update  path
         targetPage.path = newPagePath;
-        pageEvent.emit('syncDescendantsUpdate', targetPage, user);
         callback();
       },
     });
@@ -969,7 +939,6 @@ class PageService {
         newPagePath, page.revision.body, user, options,
       );
     }
-    this.pageEvent.emit('duplicate', page, user);
 
     // 4. Take over tags
     const originTags = await page.findRelatedTagsById();
@@ -1063,7 +1032,6 @@ class PageService {
     const createdPage = await this.crowi.pageService.create(
       newPagePath, page.revision.body, user, options,
     );
-    this.pageEvent.emit('duplicate', page, user);
 
     if (isRecursively) {
       this.duplicateDescendantsWithStream(page, newPagePath, user);
@@ -1231,7 +1199,6 @@ class PageService {
     const pathRegExp = new RegExp(`^${escapeStringRegexp(page.path)}`, 'i');
 
     const duplicateDescendants = this.duplicateDescendants.bind(this);
-    const pageEvent = this.pageEvent;
     let count = 0;
     let nNonEmptyDuplicatedPages = 0;
     const writeStream = new Writable({
@@ -1253,7 +1220,6 @@ class PageService {
         logger.debug(`Adding pages has completed: (totalCount=${count})`);
         // update  path
         page.path = newPagePath;
-        pageEvent.emit('syncDescendantsUpdate', page, user);
         callback();
       },
     });
@@ -1274,7 +1240,6 @@ class PageService {
     const pathRegExp = new RegExp(`^${escapeStringRegexp(page.path)}`, 'i');
 
     const duplicateDescendants = this.duplicateDescendants.bind(this);
-    const pageEvent = this.pageEvent;
     let count = 0;
     const writeStream = new Writable({
       objectMode: true,
@@ -1294,7 +1259,6 @@ class PageService {
         logger.debug(`Adding pages has completed: (totalCount=${count})`);
         // update  path
         page.path = newPagePath;
-        pageEvent.emit('syncDescendantsUpdate', page, user);
         callback();
       },
     });
@@ -1392,10 +1356,6 @@ class PageService {
        */
       this.deleteRecursivelyMainOperation(page, user, pageOp._id);
     }
-    else {
-
-      this.pageEvent.emit('delete', page, user);
-    }
 
     return deletedPage;
   }
@@ -1421,8 +1381,6 @@ class PageService {
         throw err;
       }
     }
-    this.pageEvent.emit('create', deletedPage, user);
-
     return deletedPage;
   }
 
@@ -1473,9 +1431,6 @@ class PageService {
       }
     }
 
-    this.pageEvent.emit('delete', page, user);
-    this.pageEvent.emit('create', deletedPage, user);
-
     return deletedPage;
   }
 
@@ -1532,9 +1487,6 @@ class PageService {
         throw new Error(`Failed to delete pages: ${err}`);
       }
     }
-    finally {
-      this.pageEvent.emit('syncDescendantsDelete', pages, user);
-    }
 
     try {
       await PageRedirect.bulkWrite(insertPageRedirectOperations);
@@ -1563,7 +1515,6 @@ class PageService {
     const deleteDescendants = this.deleteDescendants.bind(this);
     let count = 0;
     let nDeletedNonEmptyPages = 0; // used for updating descendantCount
-    let descendantPages: PageDocument[] = [];
 
     const writeStream = new Writable({
       objectMode: true,
@@ -1573,7 +1524,6 @@ class PageService {
         try {
           count += batch.length;
           await deleteDescendants(batch, user);
-          descendantPages = descendantPages.concat(batch);
           logger.debug(`Deleting pages progressing: (count=${count})`);
         }
         catch (err) {
@@ -1595,8 +1545,6 @@ class PageService {
 
     await streamToPromise(writeStream);
 
-    this.pageEvent.emit('delete', targetPage, user, descendantPages);
-
     return nDeletedNonEmptyPages;
   }
 
@@ -1635,8 +1583,6 @@ class PageService {
 
     await this.deleteCompletelyOperation(ids, paths);
 
-    this.pageEvent.emit('syncDescendantsDelete', pages, user); // update as renamed page
-
     return;
   }
 
@@ -1711,9 +1657,6 @@ class PageService {
        */
       this.deleteCompletelyRecursivelyMainOperation(page, user, options, pageOp._id);
     }
-    else if (!page.isEmpty && !preventEmitting) {
-      this.pageEvent.emit('deleteCompletely', page, user);
-    }
 
     return;
   }
@@ -1738,10 +1681,6 @@ class PageService {
       this.deleteCompletelyDescendantsWithStream(page, user, options);
     }
 
-    if (!page.isEmpty && !preventEmitting) {
-      this.pageEvent.emit('deleteCompletely', page, user);
-    }
-
     return;
   }
 
@@ -1766,9 +1705,6 @@ class PageService {
     let count = 0;
     let nDeletedNonEmptyPages = 0; // used for updating descendantCount
 
-
-    let descendantPages: PageDocument[] = [];
-
     const deleteMultipleCompletely = this.deleteMultipleCompletely.bind(this);
     const writeStream = new Writable({
       objectMode: true,
@@ -1778,7 +1714,6 @@ class PageService {
         try {
           count += batch.length;
           await deleteMultipleCompletely(batch, user, options);
-          descendantPages = descendantPages.concat(batch);
           logger.debug(`Adding pages progressing: (count=${count})`);
         }
         catch (err) {
@@ -1799,7 +1734,6 @@ class PageService {
       .pipe(writeStream);
 
     await streamToPromise(writeStream);
-    this.pageEvent.emit('deleteCompletely', targetPage, user, descendantPages);
 
     return nDeletedNonEmptyPages;
   }
@@ -1902,7 +1836,6 @@ class PageService {
 
     if (!isRecursively) {
       await this.updateDescendantCountOfAncestors(parent._id, 1, true);
-      this.pageEvent.emit('revert', page, user);
     }
     else {
       let pageOp;
@@ -2000,8 +1933,6 @@ class PageService {
     }, { new: true });
     await PageTagRelation.updateMany({ relatedPage: page._id }, { $set: { isPageTrashed: false } });
 
-    this.pageEvent.emit('revert', page, user);
-
     return updatedPage;
   }
 
@@ -2017,14 +1948,12 @@ class PageService {
 
     const revertDeletedDescendants = this.revertDeletedDescendants.bind(this);
     let count = 0;
-    let descendantPages: PageDocument[] = [];
     const writeStream = new Writable({
       objectMode: true,
       async write(batch, encoding, callback) {
         try {
           count += batch.length;
           await revertDeletedDescendants(batch, user);
-          descendantPages = descendantPages.concat(batch);
           logger.debug(`Reverting pages progressing: (count=${count})`);
         }
         catch (err) {
@@ -2045,7 +1974,6 @@ class PageService {
       .pipe(writeStream);
 
     await streamToPromise(writeStream);
-    this.pageEvent.emit('revert', targetPage, user, descendantPages);
 
     return count;
   }
@@ -3350,9 +3278,6 @@ class PageService {
     // Update descendantCount
     await this.updateDescendantCountOfAncestors(savedPage._id, 1, false);
 
-    // Emit create event
-    this.pageEvent.emit('create', savedPage, user);
-
     // Delete PageRedirect if exists
     const PageRedirect = mongoose.model('PageRedirect') as unknown as PageRedirectModel;
     try {
@@ -3452,9 +3377,6 @@ class PageService {
     // Update descendantCount
     await this.updateDescendantCountOfAncestors(savedPage._id, 1, false);
 
-    // Emit create event
-    this.pageEvent.emit('create', savedPage, dummyUser);
-
     return savedPage;
   }