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

add mongoose-utils for migration

Yuki Takei 6 лет назад
Родитель
Сommit
1123137cf4

+ 12 - 0
src/lib/util/mongoose-utils.js

@@ -0,0 +1,12 @@
+const mongoose = require('mongoose');
+
+const getModelSafely = (modelName) => {
+  if (mongoose.modelNames().includes(modelName)) {
+    return mongoose.model(modelName);
+  }
+  return null;
+};
+
+module.exports = {
+  getModelSafely,
+};

+ 3 - 1
src/migrations/20180926134048-make-email-unique.js

@@ -3,13 +3,15 @@ const logger = require('@alias/logger')('growi:migrate:make-email-unique');
 const mongoose = require('mongoose');
 const mongoose = require('mongoose');
 const config = require('@root/config/migrate');
 const config = require('@root/config/migrate');
 
 
+const { getModelSafely } = require('@commons/util/mongoose-utils');
+
 module.exports = {
 module.exports = {
 
 
   async up(db, next) {
   async up(db, next) {
     logger.info('Start migration');
     logger.info('Start migration');
     mongoose.connect(config.mongoUri, config.mongodb.options);
     mongoose.connect(config.mongoUri, config.mongodb.options);
 
 
-    const User = mongoose.model('User');
+    const User = getModelSafely('User') || require('@server/models/user')();
 
 
     // get all users who has 'deleted@deleted' email
     // get all users who has 'deleted@deleted' email
     const users = await User.find({ email: 'deleted@deleted' });
     const users = await User.find({ email: 'deleted@deleted' });

+ 4 - 2
src/migrations/20180927102719-init-serverurl.js

@@ -5,6 +5,8 @@ const logger = require('@alias/logger')('growi:migrate:init-serverurl');
 const mongoose = require('mongoose');
 const mongoose = require('mongoose');
 const config = require('@root/config/migrate');
 const config = require('@root/config/migrate');
 
 
+const { getModelSafely } = require('@commons/util/mongoose-utils');
+
 /**
 /**
  * check all values of the array are equal
  * check all values of the array are equal
  * @see https://stackoverflow.com/a/35568895
  * @see https://stackoverflow.com/a/35568895
@@ -21,7 +23,7 @@ module.exports = {
     logger.info('Apply migration');
     logger.info('Apply migration');
     mongoose.connect(config.mongoUri, config.mongodb.options);
     mongoose.connect(config.mongoUri, config.mongodb.options);
 
 
-    const Config = mongoose.model('Config');
+    const Config = getModelSafely('Config') || require('@server/models/config')();
 
 
     // find 'app:siteUrl'
     // find 'app:siteUrl'
     const siteUrlConfig = await Config.findOne({
     const siteUrlConfig = await Config.findOne({
@@ -74,7 +76,7 @@ module.exports = {
     logger.info('Undo migration');
     logger.info('Undo migration');
     mongoose.connect(config.mongoUri, config.mongodb.options);
     mongoose.connect(config.mongoUri, config.mongodb.options);
 
 
-    const Config = mongoose.model('Config');
+    const Config = getModelSafely('Config') || require('@server/models/config')();
 
 
     // remote 'app:siteUrl'
     // remote 'app:siteUrl'
     await Config.findOneAndDelete({
     await Config.findOneAndDelete({

+ 6 - 4
src/migrations/20181019114028-abolish-page-group-relation.js

@@ -3,6 +3,8 @@ const logger = require('@alias/logger')('growi:migrate:abolish-page-group-relati
 const mongoose = require('mongoose');
 const mongoose = require('mongoose');
 const config = require('@root/config/migrate');
 const config = require('@root/config/migrate');
 
 
+const { getModelSafely } = require('@commons/util/mongoose-utils');
+
 
 
 async function isCollectionExists(db, collectionName) {
 async function isCollectionExists(db, collectionName) {
   const collections = await db.listCollections({ name: collectionName }).toArray();
   const collections = await db.listCollections({ name: collectionName }).toArray();
@@ -36,8 +38,8 @@ module.exports = {
       return;
       return;
     }
     }
 
 
-    const Page = mongoose.model('Page');
-    const UserGroup = mongoose.model('UserGroup');
+    const Page = getModelSafely('Page') || require('@server/models/page');
+    const UserGroup = getModelSafely('UserGroup') || require('@server/models/user-group')();
 
 
     // retrieve all documents from 'pagegrouprelations'
     // retrieve all documents from 'pagegrouprelations'
     const relations = await db.collection('pagegrouprelations').find().toArray();
     const relations = await db.collection('pagegrouprelations').find().toArray();
@@ -73,8 +75,8 @@ module.exports = {
     logger.info('Undo migration');
     logger.info('Undo migration');
     mongoose.connect(config.mongoUri, config.mongodb.options);
     mongoose.connect(config.mongoUri, config.mongodb.options);
 
 
-    const Page = mongoose.model('Page');
-    const UserGroup = mongoose.model('UserGroup');
+    const Page = getModelSafely('Page') || require('@server/models/page');
+    const UserGroup = getModelSafely('UserGroup') || require('@server/models/user-group')();
 
 
     // retrieve all Page documents which granted by UserGroup
     // retrieve all Page documents which granted by UserGroup
     const relatedPages = await Page.find({ grant: Page.GRANT_USER_GROUP });
     const relatedPages = await Page.find({ grant: Page.GRANT_USER_GROUP });

+ 3 - 7
src/migrations/20190618055300-abolish-crowi-classic-auth.js

@@ -3,19 +3,15 @@ const logger = require('@alias/logger')('growi:migrate:make-email-unique');
 const mongoose = require('mongoose');
 const mongoose = require('mongoose');
 const config = require('@root/config/migrate');
 const config = require('@root/config/migrate');
 
 
-function getModel(modelName) {
-  if (mongoose.modelNames().includes(modelName)) {
-    return mongoose.model(modelName);
-  }
-  return null;
-}
+const { getModelSafely } = require('@commons/util/mongoose-utils');
+
 
 
 module.exports = {
 module.exports = {
   async up(db, next) {
   async up(db, next) {
     logger.info('Start migration');
     logger.info('Start migration');
     mongoose.connect(config.mongoUri, config.mongodb.options);
     mongoose.connect(config.mongoUri, config.mongodb.options);
 
 
-    const Config = getModel('Config') || require('@server/models/config')();
+    const Config = getModelSafely('Config') || require('@server/models/config')();
 
 
     // enable passport and delete configs for crowi classic auth
     // enable passport and delete configs for crowi classic auth
     await Promise.all([
     await Promise.all([

+ 5 - 9
src/migrations/20190618104011-add-config-app-installed.js

@@ -3,12 +3,8 @@ const logger = require('@alias/logger')('growi:migrate:add-config-app-installed'
 const mongoose = require('mongoose');
 const mongoose = require('mongoose');
 const config = require('@root/config/migrate');
 const config = require('@root/config/migrate');
 
 
-function getModel(modelName) {
-  if (mongoose.modelNames().includes(modelName)) {
-    return mongoose.model(modelName);
-  }
-  return null;
-}
+const { getModelSafely } = require('@commons/util/mongoose-utils');
+
 
 
 /**
 /**
  * BEFORE
  * BEFORE
@@ -24,8 +20,8 @@ module.exports = {
     logger.info('Apply migration');
     logger.info('Apply migration');
     mongoose.connect(config.mongoUri, config.mongodb.options);
     mongoose.connect(config.mongoUri, config.mongodb.options);
 
 
-    const Config = getModel('Config') || require('@server/models/config')();
-    const User = getModel('User') || require('@server/models/user')();
+    const Config = getModelSafely('Config') || require('@server/models/config')();
+    const User = getModelSafely('User') || require('@server/models/user')();
 
 
     // find 'app:siteUrl'
     // find 'app:siteUrl'
     const appInstalled = await Config.findOne({
     const appInstalled = await Config.findOne({
@@ -55,7 +51,7 @@ module.exports = {
     logger.info('Undo migration');
     logger.info('Undo migration');
     mongoose.connect(config.mongoUri, config.mongodb.options);
     mongoose.connect(config.mongoUri, config.mongodb.options);
 
 
-    const Config = getModel('Config') || require('@server/models/config')();
+    const Config = getModelSafely('Config') || require('@server/models/config')();
 
 
     // remote 'app:siteUrl'
     // remote 'app:siteUrl'
     await Config.findOneAndDelete({
     await Config.findOneAndDelete({