const _ = require('lodash') const config = require('../../config') const bcrypt = require('bcrypt') const sequelize = require('./sequelize') const User = require('./user') const Session = require('./session') const Role = require('./role') const UserRole = User.belongsToMany(Role, { through: 'userRoles' }) const upsert = async (Type, object, fields) => { if (!fields) { fields = ['key'] } for (var field of fields) { if (!object[field]) { throw new Error(`Missing upsert field '${field}' in ${JSON.stringify(object)}.`) } } const existing = await Type.findOne({where: _.pick(object, fields)}) if (existing) { Object.assign(existing, object) await existing.save() return existing } else { return await Type.create(object) } } module.exports = { init: () => { return sequelize.sync() }, sequelize, User, Session, Role, UserRole, upsert }