const Sequelize = require('sequelize'); const Config = require('./config.js'); const models = (db) => { const UnverifiedUser = db.define('UnverifiedUser', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.UUIDV4, allowNull: false, primaryKey: true, unique: true }, verificationToken: { type: Sequelize.DataTypes.STRING, allowNull: false }, email: { type: Sequelize.DataTypes.STRING, allowNull: false, unique: true }, discord_only_account: { type: Sequelize.DataTypes.BOOLEAN, allowNull: false, defaultValue: false }, discord_id: { type: Sequelize.DataTypes.STRING, allowNull: true }, password_hash: { type: Sequelize.DataTypes.STRING, allowNull: true } }); const User = db.define('User', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.UUIDV4, allowNull: false, primaryKey: true, unique: true }, email: { type: Sequelize.DataTypes.STRING, allowNull: false, unique: true }, discord_only_account: { type: Sequelize.DataTypes.BOOLEAN, allowNull: false, defaultValue: false }, discord_id: { type: Sequelize.DataTypes.STRING, allowNull: true }, password_hash: { type: Sequelize.DataTypes.STRING, allowNull: true } }); const Todo = db.define('Todo', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.UUIDV4, allowNull: false, primaryKey: true, unique: true }, user: { type: Sequelize.DataTypes.UUID, allowNull: false }, content: { type: Sequelize.DataTypes.TEXT, allowNull: false }, tags: { type: Sequelize.DataTypes.ARRAY(Sequelize.DataTypes.STRING), allowNull: true }, complete: { type: Sequelize.DataTypes.BOOLEAN, allowNull: false, defaultValue: false }, deadline: { type: Sequelize.DataTypes.DATE, allowNull: true } }); const Grouping = db.define('Grouping', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.UUIDV4, allowNull: false, primaryKey: true, unique: true }, complete: { type: Sequelize.DataTypes.BOOLEAN, allowNull: true }, manually_added: { type: Sequelize.DataTypes.ARRAY(Sequelize.DataTypes.UUID), allowNull: true }, required: { type: Sequelize.DataTypes.ARRAY(Sequelize.DataTypes.STRING), allowNull: true }, exclusions: { type: Sequelize.DataTypes.ARRAY(Sequelize.DataTypes.STRING), allowNull: true } }); let options = { alter: false }; if (Config.config.alter_db) { options.alter = true; } UnverifiedUser.sync(options); User.sync(options); Todo.sync(options); Grouping.sync(options); return { user: User, unverifiedUser: UnverifiedUser, todo: Todo, grouping: Grouping }; }; module.exports = models;