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

@@ -1,19 +1,24 @@
const Sequelize = require("sequelize");
const sequelize = require("../database");
class Contact extends Sequelize.Model {
static init(sequelize) {
super.init(
{
name: { type: Sequelize.STRING },
number: { type: Sequelize.STRING },
profilePicUrl: { type: Sequelize.STRING },
},
{
sequelize,
}
);
const Message = require("./Message");
return this;
}
const Contact = sequelize.define("contact", {
name: { type: Sequelize.STRING(100), allowNull: false },
number: { type: Sequelize.STRING(15), allowNull: false },
profilePicUrl: { type: Sequelize.STRING(200) },
lastMessage: { type: Sequelize.TEXT },
});
Contact.hasMany(Message, {
onDelete: "CASCADE",
onUpdate: "RESTRICT",
});
static associate(models) {
this.hasMany(models.Ticket, { foreignKey: "contactId" });
}
}
module.exports = Contact;

View File

@@ -1,22 +1,27 @@
const Sequelize = require("sequelize");
const sequelize = require("../database");
const Message = sequelize.define("message", {
id: {
type: Sequelize.STRING(50),
allowNull: false,
primaryKey: true,
},
createdAt: {
allowNull: false,
type: Sequelize.DATE(6),
},
userId: { type: Sequelize.INTEGER, defaultValue: 0 },
ack: { type: Sequelize.INTEGER, defaultValue: 0 },
messageBody: { type: Sequelize.TEXT, allowNull: false },
read: { type: Sequelize.BOOLEAN, defaultValue: false },
mediaUrl: { type: Sequelize.STRING(250) },
mediaType: { type: Sequelize.STRING(250) },
});
class Message extends Sequelize.Model {
static init(sequelize) {
super.init(
{
ack: { type: Sequelize.INTEGER, defaultValue: 0 },
read: { type: Sequelize.BOOLEAN, defaultValue: false },
body: { type: Sequelize.TEXT },
mediaUrl: { type: Sequelize.STRING },
mediaType: { type: Sequelize.STRING },
},
{
sequelize,
}
);
return this;
}
static associate(models) {
this.belongsTo(models.Ticket, { foreignKey: "ticketId" });
this.belongsTo(models.User, { foreignKey: "userId" });
}
}
module.exports = Message;

View File

@@ -0,0 +1,25 @@
const Sequelize = require("sequelize");
class Ticket extends Sequelize.Model {
static init(sequelize) {
super.init(
{
status: { type: Sequelize.STRING, defaultValue: "pending" },
lastMessage: { type: Sequelize.STRING },
},
{
sequelize,
}
);
return this;
}
static associate(models) {
this.belongsTo(models.Contact, { foreignKey: "contactId" });
this.belongsTo(models.User, { foreignKey: "userId" });
this.hasMany(models.Message, { foreignKey: "ticketId" });
}
}
module.exports = Ticket;

View File

@@ -1,13 +1,22 @@
const Sequelize = require("sequelize");
const sequelize = require("../database");
class Whatsapp extends Sequelize.Model {
static init(sequelize) {
super.init(
{
session: { type: Sequelize.TEXT },
qrcode: { type: Sequelize.TEXT },
status: { type: Sequelize.STRING },
battery: { type: Sequelize.STRING },
plugged: { type: Sequelize.BOOLEAN },
},
{
sequelize,
}
);
const Whatsapp = sequelize.define("whatsapp", {
session: { type: Sequelize.TEXT() },
qrcode: { type: Sequelize.TEXT() },
status: { type: Sequelize.STRING(60) },
battery: { type: Sequelize.STRING(20) },
plugged: { type: Sequelize.BOOLEAN() },
});
return this;
}
}
module.exports = Whatsapp;