142 lines
3.0 KiB
JavaScript
142 lines
3.0 KiB
JavaScript
|
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;
|