All models using classes and sequelize migrations

This commit is contained in:
canove
2020-07-17 14:29:10 -03:00
parent a41f7e63ac
commit 9687a1ce13
22 changed files with 578 additions and 191 deletions

View File

@@ -2,8 +2,12 @@ const Sequelize = require("sequelize");
const dbConfig = require("../config/database");
const User = require("../models/User");
const Contact = require("../models/Contact");
const Ticket = require("../models/Ticket");
const Message = require("../models/Message");
const Whatsapp = require("../models/Whatsapp");
const models = [User];
const models = [User, Contact, Ticket, Message, Whatsapp];
class Database {
constructor() {
@@ -13,7 +17,9 @@ class Database {
init() {
this.sequelize = new Sequelize(dbConfig);
models.map(model => model.init(this.sequelize));
models
.map(model => model.init(this.sequelize))
.map(model => model.associate && model.associate(this.sequelize.models));
}
}

View File

@@ -34,6 +34,6 @@ module.exports = {
},
down: queryInterface => {
return queryInterface.dropTable("users");
return queryInterface.dropTable("Users");
},
};

View File

@@ -0,0 +1,38 @@
"use strict";
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable("Contacts", {
id: {
type: Sequelize.INTEGER,
autoIncrement: true,
primaryKey: true,
allowNull: false,
},
name: {
type: Sequelize.STRING,
allowNull: false,
},
number: {
type: Sequelize.STRING,
allowNull: false,
unique: true,
},
profilePicUrl: {
type: Sequelize.STRING,
},
createdAt: {
type: Sequelize.DATE,
allowNull: false,
},
updatedAt: {
type: Sequelize.DATE,
allowNull: false,
},
});
},
down: queryInterface => {
return queryInterface.dropTable("Contacts");
},
};

View File

@@ -0,0 +1,46 @@
"use strict";
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable("Tickets", {
id: {
type: Sequelize.INTEGER,
autoIncrement: true,
primaryKey: true,
allowNull: false,
},
status: {
type: Sequelize.STRING,
defaultValue: "pending",
allowNull: false,
},
lastMessage: {
type: Sequelize.STRING,
},
contactId: {
type: Sequelize.INTEGER,
references: { model: "Contacts", key: "id" },
onUpdate: "CASCADE",
onDelete: "CASCADE",
},
userId: {
type: Sequelize.INTEGER,
references: { model: "Users", key: "id" },
onUpdate: "CASCADE",
onDelete: "SET NULL",
},
createdAt: {
type: Sequelize.DATE(6),
allowNull: false,
},
updatedAt: {
type: Sequelize.DATE(6),
allowNull: false,
},
});
},
down: queryInterface => {
return queryInterface.dropTable("Tickets");
},
};

View File

@@ -0,0 +1,58 @@
"use strict";
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable("Messages", {
id: {
type: Sequelize.STRING,
primaryKey: true,
allowNull: false,
},
body: {
type: Sequelize.TEXT,
allowNull: false,
},
ack: {
type: Sequelize.INTEGER,
allowNull: false,
defaultValue: 0,
},
read: {
type: Sequelize.BOOLEAN,
allowNull: false,
defaultValue: false,
},
mediaType: {
type: Sequelize.STRING,
},
mediaUrl: {
type: Sequelize.STRING,
},
userId: {
type: Sequelize.INTEGER,
references: { model: "Users", key: "id" },
onUpdate: "CASCADE",
onDelete: "SET NULL",
},
ticketId: {
type: Sequelize.INTEGER,
references: { model: "Tickets", key: "id" },
onUpdate: "CASCADE",
onDelete: "CASCADE",
allowNull: false,
},
createdAt: {
type: Sequelize.DATE(6),
allowNull: false,
},
updatedAt: {
type: Sequelize.DATE(6),
allowNull: false,
},
});
},
down: queryInterface => {
return queryInterface.dropTable("Messages");
},
};

View File

@@ -0,0 +1,41 @@
"use strict";
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable("Whatsapps", {
id: {
type: Sequelize.INTEGER,
autoIncrement: true,
primaryKey: true,
allowNull: false,
},
session: {
type: Sequelize.TEXT,
},
qrcode: {
type: Sequelize.TEXT,
},
status: {
type: Sequelize.STRING,
},
battery: {
type: Sequelize.STRING,
},
plugged: {
type: Sequelize.BOOLEAN,
},
createdAt: {
type: Sequelize.DATE,
allowNull: false,
},
updatedAt: {
type: Sequelize.DATE,
allowNull: false,
},
});
},
down: queryInterface => {
return queryInterface.dropTable("Whatsapps");
},
};