Browse Source

Merge branch 'migrations'

Merge migrations and move away from using sequelize.sync
sbkwgh 8 years ago
parent
commit
83bc95144e

+ 33 - 0
migrations/20170925191833-create-bans-table.js

@@ -0,0 +1,33 @@
+'use strict';
+
+module.exports = {
+  up: (queryInterface, Sequelize) => {
+    return queryInterface.createTable('bans', {
+      id: {
+        type: Sequelize.INTEGER,
+        primaryKey: true,
+        autoIncrement: true
+      },
+      canCreatePosts: {
+        type: Sequelize.BOOLEAN,
+        defaultValue: true
+      },
+      canCreateThreads: {
+        type: Sequelize.BOOLEAN,
+        defaultValue: true
+      },
+      ipBanned: {
+        type: Sequelize.BOOLEAN,
+        defaultValue: false
+      },
+      message: Sequelize.TEXT,
+      UserId: Sequelize.INTEGER,
+      createdAt: Sequelize.DATE,
+      updatedAt: Sequelize.DATE
+    })
+  },
+
+  down: (queryInterface, Sequelize) => {
+    return queryInterface.dropTable('bans');
+  }
+};

+ 30 - 0
migrations/20170925200317-create-categories-table.js

@@ -0,0 +1,30 @@
+'use strict';
+
+module.exports = {
+  up: (queryInterface, Sequelize) => {
+    return queryInterface.createTable('categories', {
+      id: {
+        type: Sequelize.INTEGER,
+        primaryKey: true,
+        autoIncrement: true
+      },
+      createdAt: Sequelize.DATE,
+      updatedAt: Sequelize.DATE,
+
+      name: {
+        type: Sequelize.STRING,
+        unique: true,
+        allowNull: false,
+      },
+      value: {
+        type: Sequelize.STRING,
+        unique: true
+      },
+      color: Sequelize.STRING
+    })
+  },
+
+  down: (queryInterface, Sequelize) => {
+    return queryInterface.dropTable('categories');
+  }
+};

+ 21 - 0
migrations/20170925201609-create-ips-table.js

@@ -0,0 +1,21 @@
+'use strict';
+
+module.exports = {
+  up: (queryInterface, Sequelize) => {
+    return queryInterface.createTable('ips', {
+      id: {
+        type: Sequelize.INTEGER,
+        primaryKey: true,
+        autoIncrement: true
+      },
+      createdAt: Sequelize.DATE,
+      updatedAt: Sequelize.DATE,
+
+      ip: Sequelize.STRING(45)
+    })
+  },
+
+  down: (queryInterface, Sequelize) => {
+    return queryInterface.dropTable('ips');
+  }
+};

+ 33 - 0
migrations/20170925201924-create-logs-table.js

@@ -0,0 +1,33 @@
+'use strict';
+
+module.exports = {
+  up: (queryInterface, Sequelize) => {
+    return queryInterface.createTable('logs', {
+      id: {
+        type: Sequelize.INTEGER,
+        primaryKey: true,
+        autoIncrement: true
+      },
+      createdAt: Sequelize.DATE,
+      updatedAt: Sequelize.DATE,
+
+      route: Sequelize.ENUM([
+        'index',
+        'search',
+        'settingsAccount',
+        'settingsGeneral',
+        'thread',
+        'threadNew',
+        'userPosts',
+        'userThreads'
+      ]),
+      ThreadId: Sequelize.INTEGER,
+      UserId: Sequelize.INTEGER,
+      SessionUserId: Sequelize.INTEGER
+    })
+  },
+
+  down: (queryInterface, Sequelize) => {
+    return queryInterface.dropTable('logs');
+  }
+};

+ 30 - 0
migrations/20170925202317-create-notifications-table.js

@@ -0,0 +1,30 @@
+'use strict';
+
+module.exports = {
+  up: (queryInterface, Sequelize) => {
+    return queryInterface.createTable('notifications', {
+      id: {
+        type: Sequelize.INTEGER,
+        primaryKey: true,
+        autoIncrement: true
+      },
+      createdAt: Sequelize.DATE,
+      updatedAt: Sequelize.DATE,
+
+      interacted: {
+        type: Sequelize.BOOLEAN,
+        defaultValue: false
+      },
+      read: {
+        type: Sequelize.BOOLEAN,
+        defaultValue: false
+      },
+      type: Sequelize.ENUM('mention', 'thread update', 'reply'),
+      UserId: Sequelize.INTEGER
+    })
+  },
+
+  down: (queryInterface, Sequelize) => {
+    return queryInterface.dropTable('notifications');
+  }
+};

+ 25 - 0
migrations/20170925202519-create-pollanswers-table.js

@@ -0,0 +1,25 @@
+'use strict';
+
+module.exports = {
+  up: (queryInterface, Sequelize) => {
+    return queryInterface.createTable('pollanswers', {
+      id: {
+        type: Sequelize.INTEGER,
+        primaryKey: true,
+        autoIncrement: true
+      },
+      createdAt: Sequelize.DATE,
+      updatedAt: Sequelize.DATE,
+      
+      answer: {
+        type: Sequelize.STRING,
+        allowNull: false
+      },
+      PollQuestionId: Sequelize.INTEGER
+    })
+  },
+
+  down: (queryInterface, Sequelize) => {
+    return queryInterface.dropTable('pollanswers');
+  }
+};

+ 25 - 0
migrations/20170925202651-create-pollquestions-table.js

@@ -0,0 +1,25 @@
+'use strict';
+
+module.exports = {
+  up: (queryInterface, Sequelize) => {
+    return queryInterface.createTable('pollquestions', {
+      id: {
+        type: Sequelize.INTEGER,
+        primaryKey: true,
+        autoIncrement: true
+      },
+      createdAt: Sequelize.DATE,
+      updatedAt: Sequelize.DATE,
+      
+      question: {
+        type: Sequelize.STRING,
+        allowNull: false
+      },
+      UserId: Sequelize.INTEGER
+    })
+  },
+
+  down: (queryInterface, Sequelize) => {
+    return queryInterface.dropTable('pollquestions');
+  }
+};

+ 23 - 0
migrations/20170925202801-create-pollvotes-table.js

@@ -0,0 +1,23 @@
+'use strict';
+
+module.exports = {
+  up: (queryInterface, Sequelize) => {
+    return queryInterface.createTable('pollvotes', {
+      id: {
+        type: Sequelize.INTEGER,
+        primaryKey: true,
+        autoIncrement: true
+      },
+      createdAt: Sequelize.DATE,
+      updatedAt: Sequelize.DATE,
+      
+      UserId: Sequelize.INTEGER,
+      PollAnswerId: Sequelize.INTEGER,
+      PollQuestionId: Sequelize.INTEGER
+    })
+  },
+
+  down: (queryInterface, Sequelize) => {
+    return queryInterface.dropTable('pollvotes');
+  }
+};

+ 23 - 0
migrations/20170925203055-create-postnotifications-table.js

@@ -0,0 +1,23 @@
+'use strict';
+
+module.exports = {
+  up: (queryInterface, Sequelize) => {
+    return queryInterface.createTable('postnotifications', {
+      id: {
+        type: Sequelize.INTEGER,
+        primaryKey: true,
+        autoIncrement: true
+      },
+      createdAt: Sequelize.DATE,
+      updatedAt: Sequelize.DATE,
+      
+      UserId: Sequelize.INTEGER,
+      PostId: Sequelize.INTEGER,
+      NotificationId: Sequelize.INTEGER
+    })
+  },
+
+  down: (queryInterface, Sequelize) => {
+    return queryInterface.dropTable('postnotifications');
+  }
+};

+ 34 - 0
migrations/20170925203433-create-posts-table.js

@@ -0,0 +1,34 @@
+'use strict';
+
+module.exports = {
+  up: (queryInterface, Sequelize) => {
+    return queryInterface.createTable('posts', {
+      id: {
+        type: Sequelize.INTEGER,
+        primaryKey: true,
+        autoIncrement: true
+      },
+      createdAt: Sequelize.DATE,
+      updatedAt: Sequelize.DATE,
+      
+      content: {
+        type: Sequelize.TEXT,
+        allowNull: false
+      },
+      postNumber: Sequelize.INTEGER,
+      replyingToUsername: Sequelize.STRING,
+      removed: {
+        type: Sequelize.BOOLEAN,
+        defaultValue: false
+      },
+
+      UserId: Sequelize.INTEGER,
+      ThreadId: Sequelize.INTEGER,
+      replyId: Sequelize.INTEGER
+    })
+  },
+
+  down: (queryInterface, Sequelize) => {
+    return queryInterface.dropTable('posts');
+  }
+};

+ 27 - 0
migrations/20170925204011-create-reports-table.js

@@ -0,0 +1,27 @@
+'use strict';
+
+module.exports = {
+  up: (queryInterface, Sequelize) => {
+    return queryInterface.createTable('reports', {
+      id: {
+        type: Sequelize.INTEGER,
+        primaryKey: true,
+        autoIncrement: true
+      },
+      createdAt: Sequelize.DATE,
+      updatedAt: Sequelize.DATE,
+      
+      reason: {
+        type: Sequelize.ENUM,
+        values: ['spam', 'inappropriate', 'harassment']
+      },
+
+      FlaggedByUserId: Sequelize.INTEGER,
+      PostId: Sequelize.INTEGER
+    })
+  },
+
+  down: (queryInterface, Sequelize) => {
+    return queryInterface.dropTable('reports');
+  }
+};

+ 22 - 0
migrations/20170925204327-create-settings-table.js

@@ -0,0 +1,22 @@
+'use strict';
+
+module.exports = {
+  up: (queryInterface, Sequelize) => {
+    return queryInterface.createTable('settings', {
+      id: {
+        type: Sequelize.INTEGER,
+        primaryKey: true,
+        autoIncrement: true
+      },
+      createdAt: Sequelize.DATE,
+      updatedAt: Sequelize.DATE,
+      
+      forumName: Sequelize.STRING,
+      forumDescription: Sequelize.STRING
+    })
+  },
+
+  down: (queryInterface, Sequelize) => {
+    return queryInterface.dropTable('settings');
+  }
+};

+ 37 - 0
migrations/20170925204827-create-threads-table.js

@@ -0,0 +1,37 @@
+'use strict';
+
+module.exports = {
+  up: (queryInterface, Sequelize) => {
+    return queryInterface.createTable('threads', {
+      id: {
+        type: Sequelize.INTEGER,
+        primaryKey: true,
+        autoIncrement: true
+      },
+      createdAt: Sequelize.DATE,
+      updatedAt: Sequelize.DATE,
+      
+      name: {
+        type: Sequelize.STRING,
+        allowNull: false
+      },
+      slug: Sequelize.TEXT,
+      postsCount: {
+        type: Sequelize.INTEGER,
+        defaultValue: 0
+      },
+      locked: {
+        type: Sequelize.BOOLEAN,
+        defaultValue: false
+      },
+
+      CategoryId: Sequelize.INTEGER,
+      UserId: Sequelize.INTEGER,
+      PollQuestionId: Sequelize.INTEGER
+    })
+  },
+
+  down: (queryInterface, Sequelize) => {
+    return queryInterface.dropTable('threads');
+  }
+};

+ 17 - 0
migrations/20170925205531-create-user_post-table.js

@@ -0,0 +1,17 @@
+'use strict';
+
+module.exports = {
+  up: (queryInterface, Sequelize) => {
+    return queryInterface.createTable('user_post', {
+      createdAt: Sequelize.DATE,
+      updatedAt: Sequelize.DATE,
+      
+      PostId: Sequelize.INTEGER,
+      UserId: Sequelize.INTEGER
+    })
+  },
+
+  down: (queryInterface, Sequelize) => {
+    return queryInterface.dropTable('user_post');
+  }
+};

+ 17 - 0
migrations/20170925205649-create-userip-table.js

@@ -0,0 +1,17 @@
+'use strict';
+
+module.exports = {
+  up: (queryInterface, Sequelize) => {
+    return queryInterface.createTable('userip', {
+      createdAt: Sequelize.DATE,
+      updatedAt: Sequelize.DATE,
+
+      IpId: Sequelize.INTEGER,
+      UserId: Sequelize.INTEGER
+    })
+  },
+
+  down: (queryInterface, Sequelize) => {
+    return queryInterface.dropTable('userip');
+  }
+};

+ 34 - 0
migrations/20170925205832-create-users-table.js

@@ -0,0 +1,34 @@
+'use strict';
+
+module.exports = {
+  up: (queryInterface, Sequelize) => {
+    return queryInterface.createTable('users', {
+      id: {
+        type: Sequelize.INTEGER,
+        primaryKey: true,
+        autoIncrement: true
+      },
+      createdAt: Sequelize.DATE,
+      updatedAt: Sequelize.DATE,
+
+      username: {
+        type: Sequelize.STRING,
+        unique: true,
+      },
+      description: Sequelize.TEXT,
+      color: Sequelize.TEXT,
+      hash: {
+        type: Sequelize.STRING,
+        allowNull: false
+      },
+      admin: {
+        type: Sequelize.BOOLEAN,
+        defaultValue: false
+      }
+    })
+  },
+
+  down: (queryInterface, Sequelize) => {
+    return queryInterface.dropTable('users');
+  }
+};

+ 21 - 0
migrations/20170925210453-create-admintokens-table.js

@@ -0,0 +1,21 @@
+'use strict';
+
+module.exports = {
+  up: (queryInterface, Sequelize) => {
+    return queryInterface.createTable('admintokens', {
+      id: {
+        type: Sequelize.INTEGER,
+        primaryKey: true,
+        autoIncrement: true
+      },
+      createdAt: Sequelize.DATE,
+      updatedAt: Sequelize.DATE,
+      
+      token: Sequelize.STRING
+    })
+  },
+
+  down: (queryInterface, Sequelize) => {
+    return queryInterface.dropTable('admintokens');
+  }
+};

+ 3 - 3
package.json

@@ -4,8 +4,8 @@
   "description": "Backend for forum",
   "main": "server.js",
   "scripts": {
-    "test": "cross-env NODE_ENV=test && node ./node_modules/mocha/bin/mocha  --harmony --timeout 30000",
-    "start": "cross-env NODE_ENV=development && node --harmony server.js"
+    "test": "cross-env NODE_ENV=test && sequelize db:migrate --env test && node ./node_modules/mocha/bin/mocha  --harmony --timeout 30000",
+    "start": "cross-env NODE_ENV=development && sequelize db:migrate && node --harmony server.js"
   },
   "author": "",
   "license": "ISC",
@@ -20,7 +20,7 @@
     "mysql": "^2.13.0",
     "randomcolor": "^0.4.4",
     "sequelize": "^3.30.0",
-    "sequelize-cli": "^2.5.1",
+    "sequelize-cli": "^2.8.0",
     "slug": "^0.9.1",
     "socket.io": "^1.7.3"
   },

+ 9 - 17
server.js

@@ -3,8 +3,6 @@ let app = express()
 
 let sockets = require('./lib/sockets')
 
-let sequelize = require('./models').sequelize
-
 let config = require('./config/server.js')
 
 //Middle-ware
@@ -43,20 +41,14 @@ app.use('/api/v1/search', require('./routes/search'))
 app.use('/api/v1/log', require('./routes/log'))
 app.use('/api/v1/poll', require('./routes/poll'))
 
-sequelize
-	.sync({ force: true })
-	.then(() => {
-		let server = app.listen(config.port, () => {
-			console.log('Listening on ' + config.port)
-
-			app.locals.appStarted = true
-			app.emit('appStarted')
-		})
-
-		sockets.init(app, server, session)
-	})
-	.catch((err) => {
-		console.log(err)
-	})
+
+let server = app.listen(config.port, () => {
+	console.log('Listening on ' + config.port)
+
+	app.locals.appStarted = true
+	app.emit('appStarted')
+})
+
+sockets.init(app, server, session)
 
 module.exports = app