106 lines
2.0 KiB
JavaScript
106 lines
2.0 KiB
JavaScript
const Sequelize = require("sequelize");
|
|
const Config = require("./config.js");
|
|
|
|
if (!Config.config.db_url) {
|
|
console.error("No database url found. please set `db_url` in config.json");
|
|
process.exit();
|
|
}
|
|
|
|
const db = new Sequelize(Config.config.db_url);
|
|
|
|
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,
|
|
},
|
|
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,
|
|
},
|
|
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,
|
|
},
|
|
content: {
|
|
type: Sequelize.DataTypes.TEXT,
|
|
allowNull: false,
|
|
},
|
|
});
|
|
|
|
const Tag = db.define("Tag", {
|
|
id: {
|
|
type: Sequelize.DataTypes.UUID,
|
|
defaultValue: Sequelize.UUIDV4,
|
|
allowNull: false,
|
|
primaryKey: true,
|
|
unique: true,
|
|
},
|
|
content: {
|
|
type: Sequelize.DataTypes.STRING,
|
|
allowNull: false,
|
|
},
|
|
});
|
|
|
|
User.hasMany(Todo);
|
|
Todo.hasMany(Tag);
|
|
|
|
let options = {
|
|
alter: false,
|
|
};
|
|
if (Config.config.alter_db) {
|
|
options.alter = true;
|
|
}
|
|
|
|
UnverifiedUser.sync(options);
|
|
User.sync(options);
|
|
Todo.sync(options);
|
|
Tag.sync(options);
|
|
module.exports = {
|
|
db: db,
|
|
constructors: {
|
|
user: () => {
|
|
return User.build();
|
|
},
|
|
},
|
|
schemas: {
|
|
user: User,
|
|
},
|
|
};
|