'use strict'; module.exports = { up: function (query, Sequelize) { var DataTypes = Sequelize; //Allow for more cut and paste :) return query.createTable('User', { login: { type: DataTypes.STRING }, password: { type: DataTypes.STRING }, admin: { type: DataTypes.BOOLEAN, allowNull: false, defaultValue: true } }, { charset: 'utf8' }); query.addIndex('User', ['login'], {indicesType: 'UNIQUE', indexName: 'LOGIN_INDEX'}); query.createTable('Measure', { id: { type: DataTypes.INTEGER, primaryKey: true, allowNull: false, autoIncrement: true }, name: { type: DataTypes.STRING, allowNull: false }, image: { type: DataTypes.STRING, allowNull: true }, postfix: { type: DataTypes.STRING, allowNull: false }, visible: { type: DataTypes.BOOLEAN, allowNull: false, defaultValue: true } }, { charset: 'utf8' }); query.createTable('Venue', { id: { type: DataTypes.INTEGER, primaryKey: true, allowNull: false, autoIncrement: true }, name: { type: DataTypes.STRING, allowNull: false }, visible: { type: DataTypes.BOOLEAN, allowNull: false, defaultValue: true } }, { charset: 'utf8' }); query.createTable('Category', { id: { type: DataTypes.INTEGER, primaryKey: true, allowNull: false, autoIncrement: true }, name: { type: DataTypes.STRING, allowNull: false }, visible: { type: DataTypes.BOOLEAN, allowNull: false, defaultValue: true } }, { charset: 'utf8' }); query.createTable('Subcategory', { id: { type: DataTypes.INTEGER, field: 'id', primaryKey: true, allowNull: false, autoIncrement: true }, name: { type: DataTypes.STRING, field: 'name', allowNull: false }, visible: { type: DataTypes.BOOLEAN, allowNull: false, defaultValue: true }, categoryId: { type: Sequelize.INTEGER, references: { model: 'Category', key: 'id' }, onUpdate: 'cascade', onDelete: 'cascade' } }, { charset: 'utf8' }); query.createTable('Item', { id: { type: DataTypes.INTEGER, primaryKey: true, allowNull: false, autoIncrement: true }, name: { type: DataTypes.STRING, allowNull: false }, counts: { type: DataTypes.JSON, allowNull: false }, visible: { type: DataTypes.BOOLEAN, allowNull: false, defaultValue: true }, subcategoryId: { type: Sequelize.INTEGER, references: { model: 'Subcategory', key: 'id' }, onUpdate: 'cascade', onDelete: 'cascade' } }, { charset: 'utf8' }); query.createTable('Sale', { id: { type: DataTypes.INTEGER, primaryKey: true, allowNull: false, autoIncrement: true }, date: { type: DataTypes.DATE, allowNull: false }, measure: { type: DataTypes.JSONB, allowNull: false }, itemId: { type: Sequelize.INTEGER, references: { model: 'Item', key: 'id' }, onUpdate: 'cascade', onDelete: 'cascade' }, venueId: { type: Sequelize.INTEGER, references: { model: 'Venue', key: 'id' }, onUpdate: 'cascade', onDelete: 'cascade' } }, { charset: 'utf8' }); }, down: function (query, Sequelize) { query.dropTable('Sale'); query.dropTable('Item'); query.dropTable('Subcategory'); query.dropTable('Category'); query.dropTable('User'); query.dropTable('Measure'); query.dropTable('Venue'); } };