Yuken Tezuka 3 лет назад
Родитель
Сommit
8de1290e3a
3 измененных файлов с 78 добавлено и 71 удалено
  1. 4 1
      bin/data-migrations/v6/Dockerfile
  2. 8 70
      bin/data-migrations/v6/migration.js
  3. 66 0
      bin/data-migrations/v6/processor.js

+ 4 - 1
bin/data-migrations/v6/Dockerfile

@@ -5,5 +5,8 @@ FROM mongo:6.0
 
 
 # copy mongo shell scripts for migration
 # copy mongo shell scripts for migration
 COPY migration.js /opt/bin/
 COPY migration.js /opt/bin/
+COPY processor.js /opt/bin/
 
 
-CMD /bin/mongosh ${MONGO_URI} /opt/bin/migration.js
+WORKDIR /opt/bin/
+
+CMD /bin/mongosh ${MONGO_URI} migration.js

+ 8 - 70
bin/data-migrations/v6/migration.js

@@ -1,35 +1,16 @@
 
 
-/* eslint-disable no-undef, no-var, vars-on-top, no-restricted-globals, regex/invalid */
+/* eslint-disable no-undef, no-var, vars-on-top, no-restricted-globals, regex/invalid, import/extensions */
 // ignore lint error because this file is js as mongoshell
 // ignore lint error because this file is js as mongoshell
 
 
-// ===========================================
-// processors for old format
-// ===========================================
-function drawioProcessor(body) {
-  var oldDrawioRegExp = /:::\s?drawio\n(.+?)\n:::/g; // drawio old format
-  return body.replace(oldDrawioRegExp, '``` drawio\n$1\n```');
-}
+var processor = require('./processor.js');
 
 
-function plantumlProcessor(body) {
-  var oldPlantUmlRegExp = /@startuml\n([\s\S]*?)\n@enduml/g; // plantUML old format
-  return body.replace(oldPlantUmlRegExp, '``` plantuml\n$1\n```');
-}
-
-function tsvProcessor(body) {
-  var oldTsvTableRegExp = /::: tsv(-h)?\n([\s\S]*?)\n:::/g; // TSV old format
-  return body.replace(oldTsvTableRegExp, '``` tsv$1\n$2\n```');
-}
+var pagesCollection = db.getCollection('pages');
+var revisionsCollection = db.getCollection('revisions');
 
 
-function csvProcessor(body) {
-  var oldCsvTableRegExp = /::: csv(-h)?\n([\s\S]*?)\n:::/g; // CSV old format
-  return body.replace(oldCsvTableRegExp, '``` csv$1\n$2\n```');
-}
+var operations = [];
 
 
-function bracketlinkProcessor(body) {
-  // https://regex101.com/r/btZ4hc/1
-  var oldBracketLinkRegExp = /(?<!\[)\[{1}(\/.*?)\]{1}(?!\])/g; // Page Link old format
-  return body.replace(oldBracketLinkRegExp, '[[$1]]');
-}
+var batchSize = process.env.BATCH_SIZE ?? 100; // default 100 revisions in 1 bulkwrite
+var batchSizeInterval = process.env.BATCH_INTERVAL ?? 3000; // default 3 sec
 
 
 // ===========================================
 // ===========================================
 // replace method with processors
 // replace method with processors
@@ -42,53 +23,10 @@ function replaceLatestRevisions(body, processors) {
   return replacedBody;
   return replacedBody;
 }
 }
 
 
-
-// ===========================================
-// main process
-// ===========================================
-
-var pagesCollection = db.getCollection('pages');
-const revisionsCollection = db.getCollection('revisions');
-
-var operations = [];
-var growiSyntaxLinkerProcessor = [];
-var userOriginalProcessor = [];
-
-var migrationType = process.env.MIGRATION_TYPE;
-
-var oldFormatProcessors;
-switch (migrationType) {
-  case 'v6-drawio':
-    oldFormatProcessors = [drawioProcessor];
-    break;
-  case 'v6-plantuml':
-    oldFormatProcessors = [plantumlProcessor];
-    break;
-  case 'v6-tsv':
-    oldFormatProcessors = [tsvProcessor];
-    break;
-  case 'v6-csv':
-    oldFormatProcessors = [csvProcessor];
-    break;
-  case 'v6-bracketlink':
-    oldFormatProcessors = [bracketlinkProcessor];
-    break;
-  case 'v6':
-    oldFormatProcessors = [drawioProcessor, plantumlProcessor, tsvProcessor, csvProcessor, bracketlinkProcessor];
-    break;
-  case undefined:
-    throw Error('env var MIGRATION_TYPE is required: document link');
-  default:
-    throw Error('invalid MIGRATION_TYPE: document link');
-}
-
-var batchSize = process.env.BATCH_SIZE ?? 100; // default 100 revisions in 1 bulkwrite
-var batchSizeInterval = process.env.BATCH_INTERVAL ?? 3000; // default 3 sec
-
 pagesCollection.find({}).forEach((doc) => {
 pagesCollection.find({}).forEach((doc) => {
   if (doc.revision) {
   if (doc.revision) {
     var revision = revisionsCollection.findOne({ _id: doc.revision });
     var revision = revisionsCollection.findOne({ _id: doc.revision });
-    var replacedBody = replaceLatestRevisions(revision.body, [...oldFormatProcessors, ...growiSyntaxLinkerProcessor, ...userOriginalProcessor]);
+    var replacedBody = replaceLatestRevisions(revision.body, [...processor]);
     var operation = {
     var operation = {
       updateOne: {
       updateOne: {
         filter: { _id: revision._id },
         filter: { _id: revision._id },

+ 66 - 0
bin/data-migrations/v6/processor.js

@@ -0,0 +1,66 @@
+
+/* eslint-disable no-undef, no-var, vars-on-top, no-restricted-globals, regex/invalid */
+// ignore lint error because this file is js as mongoshell
+
+// ===========================================
+// processors for old format
+// ===========================================
+function drawioProcessor(body) {
+  var oldDrawioRegExp = /:::\s?drawio\n(.+?)\n:::/g; // drawio old format
+  return body.replace(oldDrawioRegExp, '``` drawio\n$1\n```');
+}
+
+function plantumlProcessor(body) {
+  var oldPlantUmlRegExp = /@startuml\n([\s\S]*?)\n@enduml/g; // plantUML old format
+  return body.replace(oldPlantUmlRegExp, '``` plantuml\n$1\n```');
+}
+
+function tsvProcessor(body) {
+  var oldTsvTableRegExp = /::: tsv(-h)?\n([\s\S]*?)\n:::/g; // TSV old format
+  return body.replace(oldTsvTableRegExp, '``` tsv$1\n$2\n```');
+}
+
+function csvProcessor(body) {
+  var oldCsvTableRegExp = /::: csv(-h)?\n([\s\S]*?)\n:::/g; // CSV old format
+  return body.replace(oldCsvTableRegExp, '``` csv$1\n$2\n```');
+}
+
+function bracketlinkProcessor(body) {
+  // https://regex101.com/r/btZ4hc/1
+  var oldBracketLinkRegExp = /(?<!\[)\[{1}(\/.*?)\]{1}(?!\])/g; // Page Link old format
+  return body.replace(oldBracketLinkRegExp, '[[$1]]');
+}
+
+// ===========================================
+// main process
+// ===========================================
+
+var migrationType = process.env.MIGRATION_TYPE;
+
+var oldFormatProcessors;
+switch (migrationType) {
+  case 'v6-drawio':
+    oldFormatProcessors = [drawioProcessor];
+    break;
+  case 'v6-plantuml':
+    oldFormatProcessors = [plantumlProcessor];
+    break;
+  case 'v6-tsv':
+    oldFormatProcessors = [tsvProcessor];
+    break;
+  case 'v6-csv':
+    oldFormatProcessors = [csvProcessor];
+    break;
+  case 'v6-bracketlink':
+    oldFormatProcessors = [bracketlinkProcessor];
+    break;
+  case 'v6':
+    oldFormatProcessors = [drawioProcessor, plantumlProcessor, tsvProcessor, csvProcessor, bracketlinkProcessor];
+    break;
+  case undefined:
+    throw Error('env var MIGRATION_TYPE is required: document link');
+  default:
+    throw Error('invalid MIGRATION_TYPE: document link');
+}
+
+module.exports = oldFormatProcessors;