'use strict'; const Sequelize = require('sequelize'), config = require('config'); function init() { const db = { sequelize: new Sequelize(config.get('db.goodtimes')), Sequelize: Sequelize }; return db.sequelize.authenticate().then(function () { const Group = db.sequelize.define('group', { id: { type: Sequelize.INTEGER, primaryKey: true, autoIncrement: true }, name: Sequelize.STRING, ownerId: Sequelize.INTEGER }, { timestamps: false, classMethods: { associate: function() {} } }); const User = db.sequelize.define('users', { id: { type: Sequelize.INTEGER, primaryKey: true, autoIncrement: true }, familyName: Sequelize.STRING, firstName: Sequelize.STRING, uid: Sequelize.STRING, md5: Sequelize.STRING, /* md5 of email address for Gravatar */ authToken: Sequelize.STRING, authDate: Sequelize.DATE, authenticated: Sequelize.BOOLEAN, mailVerified: Sequelize.BOOLEAN, email: Sequelize.STRING, memberSince: Sequelize.DATE, password: Sequelize.STRING, /* SHA hash of user supplied password */ passwordExpires: Sequelize.DATE }, { timestamps: false }); // eslint-disable-next-line no-unused-vars const Authentication = db.sequelize.define('authentication', { key: { type: Sequelize.STRING, primaryKey: true, allowNull: false }, issued: Sequelize.DATE, type: { type: Sequelize.ENUM, values: ['account-setup', 'password-reset'] }, userId: { type: Sequelize.INTEGER, allowNull: false, references: { model: User, key: 'id', } } }, { timestamps: false }); // eslint-disable-next-line no-unused-vars const GroupUsers = db.sequelize.define('groupuser', { groupId: { type: Sequelize.INTEGER, allowNull: false, references: { model: Group, key: 'id' } }, userId: { type: Sequelize.INTEGER, allowNull: false, references: { model: User, key: 'id' } } }, { timestamps: false }); return db.sequelize.sync({ force: false }).then(function () { return db; }); }).catch(function (error) { console.log('ERROR: Failed to authenticate with GROUP DB'); console.log('ERROR: ' + JSON.stringify(config.get('db'), null, 2)); console.log(error); throw error; }); } module.exports = { goodTimesDB: { init } };