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

insert null to imported page document's parent field

yohei0125 4 лет назад
Родитель
Сommit
5789d67a44

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

@@ -31,6 +31,8 @@ const PAGE_GRANT_ERROR = 1;
 const STATUS_PUBLISHED = 'published';
 const STATUS_PUBLISHED = 'published';
 const STATUS_DELETED = 'deleted';
 const STATUS_DELETED = 'deleted';
 
 
+export const OVERWRITE_PERMITTED_PAGES_FIELDS = ['parent'];
+
 export interface PageDocument extends IPage, Document {}
 export interface PageDocument extends IPage, Document {}
 
 
 
 

+ 5 - 0
packages/app/src/server/routes/apiv3/overwrite-params/pages.js

@@ -41,6 +41,11 @@ class PageOverwriteParamsFactory {
       return value;
       return value;
     };
     };
 
 
+    params.parent = (value, { document, schema, propertyName }) => {
+      if (value === undefined) return null;
+      return value;
+    };
+
     if (option.initPageMetadatas) {
     if (option.initPageMetadatas) {
       params.liker = [];
       params.liker = [];
       params.seenUsers = [];
       params.seenUsers = [];

+ 11 - 2
packages/app/src/server/service/import.js

@@ -16,12 +16,19 @@ const mongoose = require('mongoose');
 
 
 const { ObjectId } = mongoose.Types;
 const { ObjectId } = mongoose.Types;
 
 
+const { OVERWRITE_PERMITTED_PAGES_FIELDS } = require('../../server/models/page');
+
 const { createBatchStream } = require('../util/batch-stream');
 const { createBatchStream } = require('../util/batch-stream');
 const CollectionProgressingStatus = require('../models/vo/collection-progressing-status');
 const CollectionProgressingStatus = require('../models/vo/collection-progressing-status');
 
 
 
 
 const BULK_IMPORT_SIZE = 100;
 const BULK_IMPORT_SIZE = 100;
 
 
+// { collection name: [fileds] }
+const OVERWRITE_PERMITTED_NON_EXISTANT_FIELD_MAP = {
+  pages: OVERWRITE_PERMITTED_PAGES_FIELDS,
+};
+
 
 
 class ImportSettings {
 class ImportSettings {
 
 
@@ -474,8 +481,10 @@ class ImportService {
     Object.entries(overwriteParams).forEach(([propertyName, overwriteValue]) => {
     Object.entries(overwriteParams).forEach(([propertyName, overwriteValue]) => {
       const value = document[propertyName];
       const value = document[propertyName];
 
 
-      // distinguish between null and undefined
-      if (value !== undefined) {
+      // check if the field does not exist but it's permitted to be overwritten
+      const isOverwritePermittedValue = OVERWRITE_PERMITTED_NON_EXISTANT_FIELD_MAP[collectionName].includes(propertyName);
+
+      if (value !== undefined || isOverwritePermittedValue) {
         const overwriteFunc = (typeof overwriteValue === 'function') ? overwriteValue : null;
         const overwriteFunc = (typeof overwriteValue === 'function') ? overwriteValue : null;
         _document[propertyName] = (overwriteFunc != null) ? overwriteFunc(value, { document: _document, propertyName, schema }) : overwriteValue;
         _document[propertyName] = (overwriteFunc != null) ? overwriteFunc(value, { document: _document, propertyName, schema }) : overwriteValue;
       }
       }