Yuki Takei пре 4 година
родитељ
комит
e29606b5ac
28 измењених фајлова са 163 додато и 191 уклоњено
  1. 0 5
      package.json
  2. 1 3
      packages/app/config/migrate.js
  3. 5 0
      packages/app/package.json
  4. 6 5
      packages/app/src/migrations/20180926134048-make-email-unique.js
  5. 5 10
      packages/app/src/migrations/20180927102719-init-serverurl.js
  6. 9 9
      packages/app/src/migrations/20181019114028-abolish-page-group-relation.js
  7. 5 7
      packages/app/src/migrations/20190618055300-abolish-crowi-classic-auth.js
  8. 7 9
      packages/app/src/migrations/20190618104011-add-config-app-installed.js
  9. 6 5
      packages/app/src/migrations/20190619055421-adjust-page-grant.js
  10. 6 5
      packages/app/src/migrations/20190624110950-fill-last-update-user.js
  11. 6 5
      packages/app/src/migrations/20190629193445-make-root-page-public.js
  12. 5 4
      packages/app/src/migrations/20191102223900-drop-configs-indices.js
  13. 5 4
      packages/app/src/migrations/20191102223901-drop-pages-indices.js
  14. 7 6
      packages/app/src/migrations/20191126173016-adjust-pages-path.js
  15. 5 4
      packages/app/src/migrations/20191127023815-drop-wrong-index-of-page-tag-relation.js
  16. 9 8
      packages/app/src/migrations/2020040216038-remove-deleteduser-from-relationgroup.js
  17. 7 8
      packages/app/src/migrations/2020042016039-remove-crowi-layout.js
  18. 5 9
      packages/app/src/migrations/20200512005851-remove-behavior-type.js
  19. 5 7
      packages/app/src/migrations/20200514001356-update-theme-color-for-dark.js
  20. 7 7
      packages/app/src/migrations/20200620203632-normalize-locale-id.js
  21. 6 9
      packages/app/src/migrations/20200827045151-remove-layout-setting.js
  22. 5 9
      packages/app/src/migrations/20200828024025-copy-aws-setting.js
  23. 5 9
      packages/app/src/migrations/20200901034313-update-mail-transmission.js
  24. 6 7
      packages/app/src/migrations/20200901034314-update-mail-transmission-fix.js
  25. 6 9
      packages/app/src/migrations/20200903080025-remove-timeline-type.js.js
  26. 6 9
      packages/app/src/migrations/20200915035234-rename-s3-config.js
  27. 5 7
      packages/app/src/migrations/2021042016038-convert-double-to-date.js
  28. 13 12
      packages/app/src/server/util/mongoose-utils.ts

+ 0 - 5
package.json

@@ -42,11 +42,6 @@
     "clean:report": "rimraf -- report",
     "clean": "npm-run-all -p clean:*",
     "console": "env-cmd -f config/env.dev.js node --experimental-repl-await src/server/console.js",
-    "migrate": "npm run migrate:up",
-    "migrate:create": "migrate-mongo create -f config/migrate.js -- ",
-    "migrate:status": "migrate-mongo status -f config/migrate.js",
-    "migrate:up": "migrate-mongo up -f config/migrate.js",
-    "migrate:down": "migrate-mongo down -f config/migrate.js",
     "plugin:def": "node bin/generate-plugin-definitions-source.js",
     "prebuild:dev:watch": "npm run prebuild:dev",
     "prebuild:dev": "npm run clean:app && env-cmd -f config/env.dev.js npm run plugin:def && env-cmd -f config/env.dev.js npm run resource && yarn build:slack",

+ 1 - 3
packages/app/config/migrate.js

@@ -5,11 +5,9 @@
  * @author Yuki Takei <yuki@weseek.co.jp>
  */
 
-require('module-alias/register');
-
 const { URL } = require('url');
 
-const { getMongoUri } = require('@commons/util/mongoose-utils');
+const { getMongoUri } = require('~/server/util/mongoose-utils');
 
 const mongoUri = getMongoUri();
 

+ 5 - 0
packages/app/package.json

@@ -14,6 +14,11 @@
     "lint:styles": "stylelint src/**/*.scss",
     "lint:swagger2openapi": "node node_modules/swagger2openapi/oas-validate tmp/swagger.json",
     "lint": "npm-run-all -p lint:js lint:styles lint:swagger2openapi",
+    "migrate": "yarn migrate:up",
+    "migrate:create": "yarn ts-node node_modules/.bin/migrate-mongo create -f config/migrate.js -- ",
+    "migrate:status": "yarn ts-node node_modules/.bin/migrate-mongo status -f config/migrate.js",
+    "migrate:up": "yarn ts-node node_modules/.bin/migrate-mongo up -f config/migrate.js",
+    "migrate:down": "yarn ts-node node_modules/.bin/migrate-mongo down -f config/migrate.js",
     "ts-node": "ts-node -r tsconfig-paths/register -r dotenv-flow/config --transpile-only",
     "ts-node-dev": "ts-node-dev -r tsconfig-paths/register -r dotenv-flow/config --transpile-only"
   },

+ 6 - 5
packages/app/src/migrations/20180926134048-make-email-unique.js

@@ -1,9 +1,10 @@
-const logger = require('@alias/logger')('growi:migrate:make-email-unique');
+import mongoose from 'mongoose';
 
-const mongoose = require('mongoose');
-const config = require('@root/config/migrate');
+import config from '^/config/migrate';
+import loggerFactory from '~/utils/logger';
+import { getModelSafely } from '~/server/util/mongoose-utils';
 
-const { getModelSafely } = require('@commons/util/mongoose-utils');
+const logger = loggerFactory('growi:migrate:make-email-unique');
 
 module.exports = {
 
@@ -11,7 +12,7 @@ module.exports = {
     logger.info('Start migration');
     mongoose.connect(config.mongoUri, config.mongodb.options);
 
-    const User = getModelSafely('User') || require('@server/models/user')();
+    const User = getModelSafely('User') || require('~/server/models/user')();
 
     // get all users who has 'deleted@deleted' email
     const users = await User.find({ email: 'deleted@deleted' });

+ 5 - 10
packages/app/src/migrations/20180927102719-init-serverurl.js

@@ -1,11 +1,10 @@
+import mongoose from 'mongoose';
 
+import Config from '~/server/models/config';
+import config from '^/config/migrate';
+import loggerFactory from '~/utils/logger';
 
-const logger = require('@alias/logger')('growi:migrate:init-serverurl');
-
-const mongoose = require('mongoose');
-const config = require('@root/config/migrate');
-
-const { getModelSafely } = require('@commons/util/mongoose-utils');
+const logger = loggerFactory('growi:migrate:init-serverurl');
 
 /**
  * check all values of the array are equal
@@ -23,8 +22,6 @@ module.exports = {
     logger.info('Apply migration');
     mongoose.connect(config.mongoUri, config.mongodb.options);
 
-    const Config = getModelSafely('Config') || require('@server/models/config')();
-
     // find 'app:siteUrl'
     const siteUrlConfig = await Config.findOne({
       ns: 'crowi',
@@ -82,8 +79,6 @@ module.exports = {
     logger.info('Rollback migration');
     mongoose.connect(config.mongoUri, config.mongodb.options);
 
-    const Config = getModelSafely('Config') || require('@server/models/config')();
-
     // remote 'app:siteUrl'
     await Config.findOneAndDelete({
       ns: 'crowi',

+ 9 - 9
packages/app/src/migrations/20181019114028-abolish-page-group-relation.js

@@ -1,10 +1,10 @@
-const logger = require('@alias/logger')('growi:migrate:abolish-page-group-relation');
+import mongoose from 'mongoose';
 
-const mongoose = require('mongoose');
-const config = require('@root/config/migrate');
-
-const { getModelSafely } = require('@commons/util/mongoose-utils');
+import config from '^/config/migrate';
+import loggerFactory from '~/utils/logger';
+import { getModelSafely } from '~/server/util/mongoose-utils';
 
+const logger = loggerFactory('growi:migrate:abolish-page-group-relation');
 
 async function isCollectionExists(db, collectionName) {
   const collections = await db.listCollections({ name: collectionName }).toArray();
@@ -38,8 +38,8 @@ module.exports = {
       return;
     }
 
-    const Page = getModelSafely('Page') || require('@server/models/page')();
-    const UserGroup = getModelSafely('UserGroup') || require('@server/models/user-group')();
+    const Page = getModelSafely('Page') || require('~/server/models/page')();
+    const UserGroup = getModelSafely('UserGroup') || require('~/server/models/user-group')();
 
     // retrieve all documents from 'pagegrouprelations'
     const relations = await db.collection('pagegrouprelations').find().toArray();
@@ -75,8 +75,8 @@ module.exports = {
     logger.info('Rollback migration');
     mongoose.connect(config.mongoUri, config.mongodb.options);
 
-    const Page = getModelSafely('Page') || require('@server/models/page')();
-    const UserGroup = getModelSafely('UserGroup') || require('@server/models/user-group')();
+    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
     const relatedPages = await Page.find({ grant: Page.GRANT_USER_GROUP });

+ 5 - 7
packages/app/src/migrations/20190618055300-abolish-crowi-classic-auth.js

@@ -1,18 +1,16 @@
-const logger = require('@alias/logger')('growi:migrate:abolish-crowi-classic-auth');
+import mongoose from 'mongoose';
 
-const mongoose = require('mongoose');
-const config = require('@root/config/migrate');
-
-const { getModelSafely } = require('@commons/util/mongoose-utils');
+import Config from '~/server/models/config';
+import config from '^/config/migrate';
+import loggerFactory from '~/utils/logger';
 
+const logger = loggerFactory('growi:migrate:abolish-crowi-classic-auth');
 
 module.exports = {
   async up(db, next) {
     logger.info('Start migration');
     mongoose.connect(config.mongoUri, config.mongodb.options);
 
-    const Config = getModelSafely('Config') || require('@server/models/config')();
-
     // enable passport and delete configs for crowi classic auth
     await Promise.all([
       Config.findOneAndUpdate(

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

@@ -1,10 +1,11 @@
-const logger = require('@alias/logger')('growi:migrate:add-config-app-installed');
+import mongoose from 'mongoose';
 
-const mongoose = require('mongoose');
-const config = require('@root/config/migrate');
-
-const { getModelSafely } = require('@commons/util/mongoose-utils');
+import Config from '~/server/models/config';
+import config from '^/config/migrate';
+import loggerFactory from '~/utils/logger';
+import { getModelSafely } from '~/server/util/mongoose-utils';
 
+const logger = loggerFactory('growi:migrate:add-config-app-installed');
 
 /**
  * BEFORE
@@ -20,8 +21,7 @@ module.exports = {
     logger.info('Apply migration');
     mongoose.connect(config.mongoUri, config.mongodb.options);
 
-    const Config = getModelSafely('Config') || require('@server/models/config')();
-    const User = getModelSafely('User') || require('@server/models/user')();
+    const User = getModelSafely('User') || require('~/server/models/user')();
 
     // find 'app:siteUrl'
     const appInstalled = await Config.findOne({
@@ -51,8 +51,6 @@ module.exports = {
     logger.info('Rollback migration');
     mongoose.connect(config.mongoUri, config.mongodb.options);
 
-    const Config = getModelSafely('Config') || require('@server/models/config')();
-
     // remote 'app:siteUrl'
     await Config.findOneAndDelete({
       ns: 'crowi',

+ 6 - 5
packages/app/src/migrations/20190619055421-adjust-page-grant.js

@@ -1,8 +1,9 @@
-require('module-alias/register');
-const logger = require('@alias/logger')('growi:migrate:adjust-page-grant');
+import mongoose from 'mongoose';
 
-const mongoose = require('mongoose');
-const config = require('@root/config/migrate');
+import config from '^/config/migrate';
+import loggerFactory from '~/utils/logger';
+
+const logger = loggerFactory('growi:migrate:adjust-page-grant');
 
 module.exports = {
 
@@ -10,7 +11,7 @@ module.exports = {
     logger.info('Apply migration');
     mongoose.connect(config.mongoUri, config.mongodb.options);
 
-    const Page = require('@server/models/page')();
+    const Page = require('~/server/models/page')();
 
     await Page.bulkWrite([
       {

+ 6 - 5
packages/app/src/migrations/20190624110950-fill-last-update-user.js

@@ -1,8 +1,9 @@
-require('module-alias/register');
-const logger = require('@alias/logger')('growi:migrate:abolish-page-group-relation');
+import mongoose from 'mongoose';
 
-const mongoose = require('mongoose');
-const config = require('@root/config/migrate');
+import config from '^/config/migrate';
+import loggerFactory from '~/utils/logger';
+
+const logger = loggerFactory('growi:migrate:abolish-page-group-relation');
 
 /**
  * FIX https://github.com/weseek/growi/issues/1067
@@ -13,7 +14,7 @@ module.exports = {
     logger.info('Apply migration');
     mongoose.connect(config.mongoUri, config.mongodb.options);
 
-    const Page = require('@server/models/page')();
+    const Page = require('~/server/models/page')();
 
     // see https://stackoverflow.com/questions/3974985/update-mongodb-field-using-value-of-another-field/37280419#37280419
 

+ 6 - 5
packages/app/src/migrations/20190629193445-make-root-page-public.js

@@ -1,15 +1,16 @@
-require('module-alias/register');
-const logger = require('@alias/logger')('growi:migrate:make-root-page-public');
+import mongoose from 'mongoose';
 
-const mongoose = require('mongoose');
-const config = require('@root/config/migrate');
+import config from '^/config/migrate';
+import loggerFactory from '~/utils/logger';
+
+const logger = loggerFactory('growi:migrate:make-root-page-public');
 
 module.exports = {
   async up(db) {
     logger.info('Apply migration');
     mongoose.connect(config.mongoUri, config.mongodb.options);
 
-    const Page = require('@server/models/page')();
+    const Page = require('~/server/models/page')();
 
     await Page.findOneAndUpdate(
       { path: '/' },

+ 5 - 4
packages/app/src/migrations/20191102223900-drop-configs-indices.js

@@ -1,8 +1,9 @@
-require('module-alias/register');
-const logger = require('@alias/logger')('growi:migrate:drop-configs-indices');
+import mongoose from 'mongoose';
 
-const mongoose = require('mongoose');
-const config = require('@root/config/migrate');
+import config from '^/config/migrate';
+import loggerFactory from '~/utils/logger';
+
+const logger = loggerFactory('growi:migrate:drop-configs-indices');
 
 async function dropIndexIfExists(collection, indexName) {
   if (await collection.indexExists(indexName)) {

+ 5 - 4
packages/app/src/migrations/20191102223901-drop-pages-indices.js

@@ -1,8 +1,9 @@
-require('module-alias/register');
-const logger = require('@alias/logger')('growi:migrate:drop-pages-indices');
+import mongoose from 'mongoose';
 
-const mongoose = require('mongoose');
-const config = require('@root/config/migrate');
+import config from '^/config/migrate';
+import loggerFactory from '~/utils/logger';
+
+const logger = loggerFactory('growi:migrate:drop-pages-indices');
 
 async function dropIndexIfExists(db, collectionName, indexName) {
   // check existence of the collection

+ 7 - 6
packages/app/src/migrations/20191126173016-adjust-pages-path.js

@@ -1,17 +1,18 @@
-require('module-alias/register');
-const logger = require('@alias/logger')('growi:migrate:adjust-pages-path');
+import mongoose from 'mongoose';
+import { pathUtils } from 'growi-commons';
 
-const mongoose = require('mongoose');
-const config = require('@root/config/migrate');
+import config from '^/config/migrate';
+import loggerFactory from '~/utils/logger';
+
+const logger = loggerFactory('growi:migrate:adjust-pages-path');
 
-const pathUtils = require('growi-commons').pathUtils;
 
 module.exports = {
   async up(db) {
     logger.info('Apply migration');
     mongoose.connect(config.mongoUri, config.mongodb.options);
 
-    const Page = require('@server/models/page')();
+    const Page = require('~/server/models/page')();
 
     // retrieve target data
     const pages = await Page.find({ path: /^(?!\/)/ });

+ 5 - 4
packages/app/src/migrations/20191127023815-drop-wrong-index-of-page-tag-relation.js

@@ -1,8 +1,9 @@
-require('module-alias/register');
-const logger = require('@alias/logger')('growi:migrate:drop-wrong-index-of-page-tag-relation');
+import mongoose from 'mongoose';
 
-const mongoose = require('mongoose');
-const config = require('@root/config/migrate');
+import config from '^/config/migrate';
+import loggerFactory from '~/utils/logger';
+
+const logger = loggerFactory('growi:migrate:drop-wrong-index-of-page-tag-relation');
 
 async function dropIndexIfExists(db, collectionName, indexName) {
   // check existence of the collection

+ 9 - 8
packages/app/src/migrations/2020040216038-remove-deleteduser-from-relationgroup.js

@@ -1,18 +1,18 @@
-require('module-alias/register');
-const logger = require('@alias/logger')('growi:migrate:remove-deleteduser-from-relationgroup');
+import mongoose from 'mongoose';
 
-const mongoose = require('mongoose');
-const config = require('@root/config/migrate');
+import config from '^/config/migrate';
+import loggerFactory from '~/utils/logger';
+import { getModelSafely } from '~/server/util/mongoose-utils';
 
-const { getModelSafely } = require('@commons/util/mongoose-utils');
+const logger = loggerFactory('growi:migrate:remove-deleteduser-from-relationgroup');
 
 module.exports = {
   async up(db) {
     logger.info('Apply migration');
     mongoose.connect(config.mongoUri, config.mongodb.options);
 
-    const User = getModelSafely('User') || require('@server/models/user')();
-    const UserGroupRelation = getModelSafely('UserGroupRelation') || require('@server/models/user-group-relation')();
+    const User = getModelSafely('User') || require('~/server/models/user')();
+    const UserGroupRelation = getModelSafely('UserGroupRelation') || require('~/server/models/user-group-relation')();
 
     const deletedUsers = await User.find({ status: 4 }); // deleted user
     const requests = await UserGroupRelation.remove({ relatedUser: deletedUsers });
@@ -24,7 +24,8 @@ module.exports = {
 
   },
 
-  down(db) {
+  down(db, next) {
     // do not rollback
+    next();
   },
 };

+ 7 - 8
packages/app/src/migrations/2020042016039-remove-crowi-layout.js

@@ -1,18 +1,16 @@
-require('module-alias/register');
-const logger = require('@alias/logger')('growi:migrate:remove-crowi-lauout');
+import mongoose from 'mongoose';
 
-const mongoose = require('mongoose');
-const config = require('@root/config/migrate');
+import Config from '~/server/models/config';
+import config from '^/config/migrate';
+import loggerFactory from '~/utils/logger';
 
-const { getModelSafely } = require('@commons/util/mongoose-utils');
+const logger = loggerFactory('growi:migrate:remove-crowi-lauout');
 
 module.exports = {
   async up(db) {
     logger.info('Apply migration');
     mongoose.connect(config.mongoUri, config.mongodb.options);
 
-    const Config = getModelSafely('Config') || require('@server/models/config')();
-
     const query = { key: 'customize:layout', value: JSON.stringify('crowi') };
 
     await Config.findOneAndUpdate(query, { value: JSON.stringify('growi') }); // update layout
@@ -20,7 +18,8 @@ module.exports = {
     logger.info('Migration has successfully applied');
   },
 
-  down(db) {
+  down(db, next) {
     // do not rollback
+    next();
   },
 };

+ 5 - 9
packages/app/src/migrations/20200512005851-remove-behavior-type.js

@@ -1,18 +1,16 @@
-require('module-alias/register');
-const logger = require('@alias/logger')('growi:migrate:remove-behavior-type');
+import mongoose from 'mongoose';
 
-const mongoose = require('mongoose');
-const config = require('@root/config/migrate');
+import Config from '~/server/models/config';
+import config from '^/config/migrate';
+import loggerFactory from '~/utils/logger';
 
-const { getModelSafely } = require('@commons/util/mongoose-utils');
+const logger = loggerFactory('growi:migrate:remove-behavior-type');
 
 module.exports = {
   async up(db, client) {
     logger.info('Apply migration');
     mongoose.connect(config.mongoUri, config.mongodb.options);
 
-    const Config = getModelSafely('Config') || require('@server/models/config')();
-
     await Config.findOneAndDelete({ key: 'customize:behavior' }); // remove behavior
 
     logger.info('Migration has successfully applied');
@@ -23,8 +21,6 @@ module.exports = {
     logger.info('Rollback migration');
     mongoose.connect(config.mongoUri, config.mongodb.options);
 
-    const Config = getModelSafely('Config') || require('@server/models/config')();
-
     const insertConfig = new Config({
       ns: 'crowi',
       key: 'customize:behavior',

+ 5 - 7
packages/app/src/migrations/20200514001356-update-theme-color-for-dark.js

@@ -1,18 +1,16 @@
-require('module-alias/register');
-const logger = require('@alias/logger')('growi:migrate:update-theme-color-for-dark');
+import mongoose from 'mongoose';
 
-const mongoose = require('mongoose');
-const config = require('@root/config/migrate');
+import Config from '~/server/models/config';
+import config from '^/config/migrate';
+import loggerFactory from '~/utils/logger';
 
-const { getModelSafely } = require('@commons/util/mongoose-utils');
+const logger = loggerFactory('growi:migrate:update-theme-color-for-dark');
 
 module.exports = {
   async up(db, client) {
     logger.info('Apply migration');
     mongoose.connect(config.mongoUri, config.mongodb.options);
 
-    const Config = getModelSafely('Config') || require('@server/models/config')();
-
     await Promise.all([
       await Config.findOneAndUpdate({ key: 'customize:theme', value: JSON.stringify('default-dark') }, { value: JSON.stringify('default') }), // update default-dark
       await Config.findOneAndUpdate({ key: 'customize:theme', value: JSON.stringify('blue-night') }, { value: JSON.stringify('mono-blue') }), // update blue-night

+ 7 - 7
packages/app/src/migrations/20200620203632-normalize-locale-id.js

@@ -1,18 +1,18 @@
-require('module-alias/register');
-const logger = require('@alias/logger')('growi:migrate:normalize-locale-id');
+import mongoose from 'mongoose';
 
-const mongoose = require('mongoose');
-const config = require('@root/config/migrate');
+import Config from '~/server/models/config';
+import config from '^/config/migrate';
+import loggerFactory from '~/utils/logger';
+import { getModelSafely } from '~/server/util/mongoose-utils';
 
-const { getModelSafely } = require('@commons/util/mongoose-utils');
+const logger = loggerFactory('growi:migrate:normalize-locale-id');
 
 module.exports = {
   async up(db, client) {
     logger.info('Apply migration');
     mongoose.connect(config.mongoUri, config.mongodb.options);
 
-    const Config = getModelSafely('Config') || require('@server/models/config')();
-    const User = getModelSafely('User') || require('@server/models/user')();
+    const User = getModelSafely('User') || require('~/server/models/user')();
 
     await Promise.all([
       // update en-US -> en_US

+ 6 - 9
packages/app/src/migrations/20200827045151-remove-layout-setting.js

@@ -1,18 +1,17 @@
-require('module-alias/register');
-const logger = require('@alias/logger')('growi:migrate:remove-layout-setting');
+import mongoose from 'mongoose';
 
-const mongoose = require('mongoose');
-const config = require('@root/config/migrate');
+import Config from '~/server/models/config';
+import config from '^/config/migrate';
+import loggerFactory from '~/utils/logger';
+import { getModelSafely } from '~/server/util/mongoose-utils';
 
-const { getModelSafely } = require('@commons/util/mongoose-utils');
+const logger = loggerFactory('growi:migrate:remove-layout-setting');
 
 module.exports = {
   async up(db, client) {
     logger.info('Apply migration');
     mongoose.connect(config.mongoUri, config.mongodb.options);
 
-    const Config = getModelSafely('Config') || require('@server/models/config')();
-
     const layoutType = await Config.findOne({ key: 'customize:layout' });
 
     if (layoutType == null) {
@@ -42,8 +41,6 @@ module.exports = {
     logger.info('Rollback migration');
     mongoose.connect(config.mongoUri, config.mongodb.options);
 
-    const Config = getModelSafely('Config') || require('@server/models/config')();
-
     const theme = await Config.findOne({ key: 'customize:theme' });
     const insertLayoutType = (theme.value === '"kibela"') ? 'kibela' : 'growi';
 

+ 5 - 9
packages/app/src/migrations/20200828024025-copy-aws-setting.js

@@ -1,18 +1,16 @@
-require('module-alias/register');
-const logger = require('@alias/logger')('growi:migrate:remove-layout-setting');
+import mongoose from 'mongoose';
 
-const mongoose = require('mongoose');
-const config = require('@root/config/migrate');
+import Config from '~/server/models/config';
+import config from '^/config/migrate';
+import loggerFactory from '~/utils/logger';
 
-const { getModelSafely } = require('@commons/util/mongoose-utils');
+const logger = loggerFactory('growi:migrate:remove-layout-setting');
 
 module.exports = {
   async up(db, client) {
     logger.info('Apply migration');
     mongoose.connect(config.mongoUri, config.mongodb.options);
 
-    const Config = getModelSafely('Config') || require('@server/models/config')();
-
     const [accessKeyId, secretAccessKey] = await Promise.all([
       Config.findOne({ key: 'aws:accessKeyId' }),
       Config.findOne({ key: 'aws:secretAccessKey' }),
@@ -59,8 +57,6 @@ module.exports = {
     logger.info('Rollback migration');
     mongoose.connect(config.mongoUri, config.mongodb.options);
 
-    const Config = getModelSafely('Config') || require('@server/models/config')();
-
     await Config.deleteMany({ key: { $in: ['mail:sesAccessKeyId', 'mail:sesSecretAccessKey'] } });
 
     logger.info('Migration has been successfully rollbacked');

+ 5 - 9
packages/app/src/migrations/20200901034313-update-mail-transmission.js

@@ -1,18 +1,16 @@
-require('module-alias/register');
-const logger = require('@alias/logger')('growi:migrate:update-mail-transmission');
+import mongoose from 'mongoose';
 
-const mongoose = require('mongoose');
-const config = require('@root/config/migrate');
+import Config from '~/server/models/config';
+import config from '^/config/migrate';
+import loggerFactory from '~/utils/logger';
 
-const { getModelSafely } = require('@commons/util/mongoose-utils');
+const logger = loggerFactory('growi:migrate:update-mail-transmission');
 
 module.exports = {
   async up(db, client) {
     logger.info('Apply migration');
     mongoose.connect(config.mongoUri, config.mongodb.options);
 
-    const Config = getModelSafely('Config') || require('@server/models/config')();
-
     const sesExist = await Config.findOne({
       ns: 'crowi',
       key: 'mail:sesAccessKeyId',
@@ -37,8 +35,6 @@ module.exports = {
     logger.info('Rollback migration');
     mongoose.connect(config.mongoUri, config.mongodb.options);
 
-    const Config = getModelSafely('Config') || require('@server/models/config')();
-
     // remote 'mail:transmissionMethod'
     await Config.findOneAndDelete({
       ns: 'crowi',

+ 6 - 7
packages/app/src/migrations/20200901034314-update-mail-transmission-fix.js

@@ -1,18 +1,17 @@
-require('module-alias/register');
-const logger = require('@alias/logger')('growi:migrate:update-mail-transmission-fix');
+import loggerFactory from '~/utils/logger';
 
-const mongoose = require('mongoose');
-const config = require('@root/config/migrate');
+import Config from '~/server/models/config';
+
+const logger = loggerFactory('growi:migrate:update-mail-transmission-fix');
 
-const { getModelSafely } = require('@commons/util/mongoose-utils');
+const mongoose = require('mongoose');
+const config = require('^/config/migrate');
 
 module.exports = {
   async up(db, client) {
     logger.info('Apply migration');
     mongoose.connect(config.mongoUri, config.mongodb.options);
 
-    const Config = getModelSafely('Config') || require('@server/models/config')();
-
     const transmissionMethod = await Config.findOne({
       ns: 'crowi',
       key: 'mail:transmissionMethod',

+ 6 - 9
packages/app/src/migrations/20200903080025-remove-timeline-type.js.js

@@ -1,18 +1,17 @@
-require('module-alias/register');
-const logger = require('@alias/logger')('growi:migrate:remove-behavior-type');
+import loggerFactory from '~/utils/logger';
 
-const mongoose = require('mongoose');
-const config = require('@root/config/migrate');
+import Config from '~/server/models/config';
+
+const logger = loggerFactory('growi:migrate:remove-timeline-type');
 
-const { getModelSafely } = require('@commons/util/mongoose-utils');
+const mongoose = require('mongoose');
+const config = require('^/config/migrate');
 
 module.exports = {
   async up(db, client) {
     logger.info('Apply migration');
     mongoose.connect(config.mongoUri, config.mongodb.options);
 
-    const Config = getModelSafely('Config') || require('@server/models/config')();
-
     await Config.findOneAndDelete({ key: 'customize:isEnabledTimeline' }); // remove timeline
 
     logger.info('Migration has successfully applied');
@@ -23,8 +22,6 @@ module.exports = {
     logger.info('Rollback migration');
     mongoose.connect(config.mongoUri, config.mongodb.options);
 
-    const Config = getModelSafely('Config') || require('@server/models/config')();
-
     const insertConfig = new Config({
       ns: 'crowi',
       key: 'customize:isEnabledTimeline',

+ 6 - 9
packages/app/src/migrations/20200915035234-rename-s3-config.js

@@ -1,10 +1,11 @@
-require('module-alias/register');
-const logger = require('@alias/logger')('growi:migrate:rename-s3-config');
+import loggerFactory from '~/utils/logger';
 
-const mongoose = require('mongoose');
-const config = require('@root/config/migrate');
+import Config from '~/server/models/config';
+
+const logger = loggerFactory('growi:migrate:remove-timeline-type');
 
-const { getModelSafely } = require('@commons/util/mongoose-utils');
+const mongoose = require('mongoose');
+const config = require('^/config/migrate');
 
 const awsConfigs = [
   {
@@ -34,8 +35,6 @@ module.exports = {
     logger.info('Apply migration');
     mongoose.connect(config.mongoUri, config.mongodb.options);
 
-    const Config = getModelSafely('Config') || require('@server/models/config')();
-
     const request = awsConfigs.map((awsConfig) => {
       return {
         updateOne: {
@@ -55,8 +54,6 @@ module.exports = {
 
     mongoose.connect(config.mongoUri, config.mongodb.options);
 
-    const Config = getModelSafely('Config') || require('@server/models/config')();
-
     const request = awsConfigs.map((awsConfig) => {
       return {
         updateOne: {

+ 5 - 7
packages/app/src/migrations/2021042016038-convert-double-to-date.js

@@ -1,18 +1,16 @@
-require('module-alias/register');
-const logger = require('@alias/logger')('growi:migrate:convert-double-to-date');
+import mongoose from 'mongoose';
+import loggerFactory from '~/utils/logger';
 
-const mongoose = require('mongoose');
-const config = require('@root/config/migrate');
+import Page from '~/server/models/page';
+import config from '^/config/migrate';
 
-const { getModelSafely } = require('@commons/util/mongoose-utils');
+const logger = loggerFactory('growi:migrate:remove-crowi-lauout');
 
 module.exports = {
   async up(db) {
     logger.info('Apply migration');
     mongoose.connect(config.mongoUri, config.mongodb.options);
 
-    const Page = getModelSafely('Page') || require('@server/models/page')();
-
     const pages = await Page.find({ updatedAt: { $type: 'double' } });
 
     if (pages.length === 0) {

+ 13 - 12
packages/app/src/server/util/mongoose-utils.ts

@@ -1,6 +1,8 @@
-const mongoose = require('mongoose');
+import mongoose, {
+  Model, Document, ConnectionOptions, Schema,
+} from 'mongoose';
 
-const getMongoUri = () => {
+export const getMongoUri = (): string => {
   const { env } = process;
 
   return env.MONGOLAB_URI // for B.C.
@@ -10,21 +12,20 @@ const getMongoUri = () => {
     || ((env.NODE_ENV === 'test') ? 'mongodb://mongo/growi_test' : 'mongodb://mongo/growi');
 };
 
-const getModelSafely = (modelName) => {
+export const getModelSafely = <T>(modelName: string): Model<T & Document> | null => {
   if (mongoose.modelNames().includes(modelName)) {
-    return mongoose.model(modelName);
+    return mongoose.model<T & Document>(modelName);
   }
   return null;
 };
 
-const mongoOptions = {
-  useNewUrlParser: true, // removes a deprecation warning when connecting
-  useUnifiedTopology: true,
-  useFindAndModify: false,
+export const getOrCreateModel = <Interface, Method>(modelName: string, schema: Schema<Interface>): Method & Model<Interface & Document> => {
+  if (mongoose.modelNames().includes(modelName)) {
+    return mongoose.model<Interface & Document, Method & Model<Interface & Document>>(modelName);
+  }
+  return mongoose.model<Interface & Document, Method & Model<Interface & Document>>(modelName, schema);
 };
 
-module.exports = {
-  getMongoUri,
-  getModelSafely,
-  mongoOptions,
+export const mongoOptions: ConnectionOptions = {
+  useFindAndModify: false,
 };