Răsfoiți Sursa

Merge pull request #5877 from weseek/feat/leave-rename-page-operation-without-delete

feat: Delete all PageOperation documents except ones with actionType set to Rename
Yohei Shiina 3 ani în urmă
părinte
comite
483241e1cc

+ 1 - 0
packages/app/src/server/crowi/index.js

@@ -17,6 +17,7 @@ import loggerFactory from '~/utils/logger';
 import { projectRoot } from '~/utils/project-dir-utils';
 
 import Activity from '../models/activity';
+import PageOperation, { PageActionType } from '../models/page-operation';
 import PageRedirect from '../models/page-redirect';
 import Tag from '../models/tag';
 import UserGroup from '../models/user-group';

+ 13 - 0
packages/app/src/server/models/page-operation.ts

@@ -7,8 +7,11 @@ import {
   IPageForResuming, IUserForResuming, IOptionsForResuming,
 } from '~/server/interfaces/page-operation';
 
+import loggerFactory from '../../utils/logger';
 import { ObjectIdLike } from '../interfaces/mongoose-utils';
 
+const logger = loggerFactory('growi:models:page-operation');
+
 type IObjectId = mongoose.Types.ObjectId;
 const ObjectId = mongoose.Schema.Types.ObjectId;
 
@@ -48,6 +51,8 @@ export type PageOperationDocumentHasId = PageOperationDocument & { _id: ObjectId
 
 export interface PageOperationModel extends Model<PageOperationDocument> {
   findByIdAndUpdatePageActionStage(pageOpId: ObjectIdLike, stage: PageActionStage): Promise<PageOperationDocumentHasId | null>
+  findMainOps(filter?: FilterQuery<PageOperationDocument>, projection?: any, options?: QueryOptions): Promise<PageOperationDocumentHasId[]>
+  deleteByActionTypes(deleteTypeList: PageActionType[]): Promise<void>
 }
 
 const pageSchemaForResuming = new Schema<IPageForResuming>({
@@ -116,4 +121,12 @@ schema.statics.findMainOps = async function(
   );
 };
 
+schema.statics.deleteByActionTypes = async function(
+    actionTypes: PageActionType[],
+): Promise<void> {
+
+  await this.deleteMany({ actionType: { $in: actionTypes } });
+  logger.info(`Deleted all PageOperation documents with actionType: [${actionTypes}]`);
+};
+
 export default getOrCreateModel<PageOperationDocument, PageOperationModel>('PageOperation', schema);

+ 7 - 3
packages/app/src/server/service/page-operation.ts

@@ -1,6 +1,6 @@
 import { pagePathUtils } from '@growi/core';
 
-import PageOperation from '~/server/models/page-operation';
+import PageOperation, { PageActionType } from '~/server/models/page-operation';
 
 const { isEitherOfPathAreaOverlap, isPathAreaOverlap, isTrashPage } = pagePathUtils;
 
@@ -13,8 +13,12 @@ class PageOperationService {
   }
 
   // TODO: Remove this code when resuming feature is implemented
-  async init():Promise<void> {
-    await PageOperation.deleteMany({});
+  async init() {
+    const {
+      Duplicate, Delete, DeleteCompletely, Revert, NormalizeParent,
+    } = PageActionType;
+    const types = [Duplicate, Delete, DeleteCompletely, Revert, NormalizeParent];
+    await PageOperation.deleteByActionTypes(types);
   }
 
   /**