feat: checking for whatsapp session Id on ticket and message creation

This commit is contained in:
canove
2020-09-06 14:22:05 -03:00
parent 371477aa98
commit b793d28e60
7 changed files with 60 additions and 6 deletions

View File

@@ -1,6 +1,7 @@
const Message = require("../models/Message");
const Contact = require("../models/Contact");
const User = require("../models/User");
const Whatsapp = require("../models/Whatsapp");
const Ticket = require("../models/Ticket");
const { getIO } = require("../libs/socket");
@@ -11,7 +12,7 @@ const { MessageMedia } = require("whatsapp-web.js");
const setMessagesAsRead = async ticket => {
const io = getIO();
const wbot = getWbot();
const wbot = getWbot(ticket.whatsappId);
await Message.update(
{ read: true },
@@ -104,7 +105,6 @@ exports.index = async (req, res, next) => {
};
exports.store = async (req, res, next) => {
const wbot = getWbot();
const io = getIO();
const { ticketId } = req.params;
@@ -126,6 +126,22 @@ exports.store = async (req, res, next) => {
return res.status(404).json({ error: "No ticket found with this ID" });
}
if (!ticket.whatsappId) {
const defaultWhatsapp = await Whatsapp.findOne({
where: { default: true },
});
if (!defaultWhatsapp) {
return res
.status(404)
.json({ error: "No default WhatsApp found. Check Connection page." });
}
await ticket.setWhatsapp(defaultWhatsapp);
}
const wbot = getWbot(ticket.whatsappId);
try {
if (media) {
const newMedia = MessageMedia.fromFilePath(req.file.path);
@@ -178,7 +194,7 @@ exports.store = async (req, res, next) => {
await setMessagesAsRead(ticket);
return res.json({ newMessage, ticket });
return res.status(200).json({ newMessage, ticket });
}
return res

View File

@@ -4,6 +4,7 @@ const { startOfDay, endOfDay, parseISO } = require("date-fns");
const Ticket = require("../models/Ticket");
const Contact = require("../models/Contact");
const Message = require("../models/Message");
const Whatsapp = require("../models/Whatsapp");
const { getIO } = require("../libs/socket");
@@ -110,7 +111,18 @@ exports.index = async (req, res) => {
exports.store = async (req, res) => {
const io = getIO();
const ticket = await Ticket.create(req.body);
const defaultWhatsapp = await Whatsapp.findOne({
where: { default: true },
});
if (!defaultWhatsapp) {
return res
.status(404)
.json({ error: "No default WhatsApp found. Check Connection page." });
}
const ticket = await defaultWhatsapp.createTicket(req.body);
const contact = await ticket.getContact();

View File

@@ -20,7 +20,6 @@ exports.store = async (req, res) => {
"Check-default",
"Only one default whatsapp is permited",
async value => {
// console.log("cai no if", value);
if (value === true) {
const whatsappFound = await Whatsapp.findOne({
where: { default: true },
@@ -88,6 +87,8 @@ exports.update = async (req, res) => {
});
if (whatsappFound) {
return !(whatsappFound.id !== +whatsappId);
} else {
return true;
}
} else return true;
}

View File

@@ -0,0 +1,16 @@
"use strict";
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.addColumn("Tickets", "whatsappId", {
type: Sequelize.INTEGER,
references: { model: "Whatsapps", key: "id" },
onUpdate: "CASCADE",
onDelete: "SET NULL",
});
},
down: queryInterface => {
return queryInterface.removeColumn("Tickets", "whatsappId");
},
};

View File

@@ -90,7 +90,8 @@ module.exports = {
const sessionIndex = sessions.findIndex(s => s.id === whatsappId);
if (sessionIndex === -1) {
throw new Error("This Wbot session is not initialized");
console.log("This Wbot session is not initialized");
return null;
}
return sessions[sessionIndex];
},

View File

@@ -39,6 +39,10 @@ class Ticket extends Sequelize.Model {
static associate(models) {
this.belongsTo(models.Contact, { foreignKey: "contactId", as: "contact" });
this.belongsTo(models.User, { foreignKey: "userId", as: "user" });
this.belongsTo(models.Whatsapp, {
foreignKey: "whatsappId",
as: "whatsapp",
});
this.hasMany(models.Message, { foreignKey: "ticketId", as: "messages" });
}
}

View File

@@ -23,6 +23,10 @@ class Whatsapp extends Sequelize.Model {
return this;
}
static associate(models) {
this.hasMany(models.Ticket, { foreignKey: "whatsappId", as: "tickets" });
}
}
module.exports = Whatsapp;