From 0b61e8391f8bb3a506654887fdb51e77f54f4d83 Mon Sep 17 00:00:00 2001 From: canove Date: Tue, 4 Aug 2020 11:18:26 -0300 Subject: [PATCH] improvement: moved unreadMessages logic to model --- backend/src/controllers/TicketController.js | 32 -------------------- backend/src/models/Ticket.js | 8 +++++ backend/src/services/wbotMessageListener.js | 6 ++-- frontend/src/components/TicketsList/index.js | 26 ++++------------ 4 files changed, 17 insertions(+), 55 deletions(-) diff --git a/backend/src/controllers/TicketController.js b/backend/src/controllers/TicketController.js index 25b9a3f..869cad2 100644 --- a/backend/src/controllers/TicketController.js +++ b/backend/src/controllers/TicketController.js @@ -39,22 +39,6 @@ exports.index = async (req, res) => { attributes: ["name", "number", "profilePicUrl"], }, ], - attributes: { - include: [ - [ - Sequelize.literal(`( - SELECT COUNT(*) - FROM Messages AS message - WHERE - message.ticketId = Ticket.id - AND - message.read = 0 - - )`), - "unreadMessages", - ], - ], - }, order: [["updatedAt", "DESC"]], }); @@ -89,22 +73,6 @@ exports.update = async (req, res) => { attributes: ["name", "number", "profilePicUrl"], }, ], - attributes: { - include: [ - [ - Sequelize.literal(`( - SELECT COUNT(*) - FROM Messages AS message - WHERE - message.ticketId = Ticket.id - AND - message.read = 0 - - )`), - "unreadMessages", - ], - ], - }, }); if (!ticket) { diff --git a/backend/src/models/Ticket.js b/backend/src/models/Ticket.js index c541a8c..a2c1619 100644 --- a/backend/src/models/Ticket.js +++ b/backend/src/models/Ticket.js @@ -1,4 +1,5 @@ const Sequelize = require("sequelize"); +const Message = require("./Message"); class Ticket extends Sequelize.Model { static init(sequelize) { @@ -6,6 +7,7 @@ class Ticket extends Sequelize.Model { { status: { type: Sequelize.STRING, defaultValue: "pending" }, userId: { type: Sequelize.INTEGER, defaultValue: null }, + unreadMessages: { type: Sequelize.VIRTUAL }, lastMessage: { type: Sequelize.STRING }, }, { @@ -13,6 +15,12 @@ class Ticket extends Sequelize.Model { } ); + this.addHook("afterUpdate", async ticket => { + ticket.unreadMessages = await Message.count({ + where: { ticketId: ticket.id, read: false }, + }); + }); + return this; } diff --git a/backend/src/services/wbotMessageListener.js b/backend/src/services/wbotMessageListener.js index f3fa714..81e1b56 100644 --- a/backend/src/services/wbotMessageListener.js +++ b/backend/src/services/wbotMessageListener.js @@ -48,7 +48,7 @@ const verifyTicket = async contact => { }); if (ticket) { - await ticket.update({ status: "open" }); + await ticket.update({ status: "pending", userId: null }); } } @@ -120,8 +120,8 @@ const handleMessage = async (msg, ticket, contact) => { const serializaedTicket = { ...ticket.dataValues, - unreadMessages: 1, - lastMessage: newMessage.body, + // unreadMessages: 1, + // lastMessage: newMessage.body, contact: contact, }; diff --git a/frontend/src/components/TicketsList/index.js b/frontend/src/components/TicketsList/index.js index eef053d..b89b26f 100644 --- a/frontend/src/components/TicketsList/index.js +++ b/frontend/src/components/TicketsList/index.js @@ -251,6 +251,7 @@ const TicketsList = () => { socket.emit("joinNotification"); socket.on("ticket", data => { + console.log("data", data); if (data.action === "updateUnread") { resetUnreadMessages(data); } @@ -268,7 +269,7 @@ const TicketsList = () => { socket.on("appMessage", data => { if (data.action === "create") { - updateUnreadMessagesCount(data); + updateTickets(data); if ( (ticketId && data.message.ticketId === +ticketId && @@ -285,26 +286,8 @@ const TicketsList = () => { }; }, [ticketId, userId, history]); - const updateUnreadMessagesCount = ({ message, ticket }) => { - setTickets(prevState => { - const ticketIndex = prevState.findIndex(t => t.id === message.ticketId); - - if (ticketIndex !== -1) { - let aux = [...prevState]; - if (!message.fromMe) { - aux[ticketIndex].unreadMessages++; - } - aux[ticketIndex].lastMessage = message.body; - aux[ticketIndex].status = ticket.status; - aux.unshift(aux.splice(ticketIndex, 1)[0]); - return aux; - } else { - return [ticket, ...prevState]; - } - }); - }; - const updateTickets = ({ ticket }) => { + console.log("recebido", ticket); setTickets(prevState => { const ticketIndex = prevState.findIndex(t => t.id === ticket.id); @@ -313,11 +296,14 @@ const TicketsList = () => { } else { let aux = [...prevState]; aux[ticketIndex] = ticket; + aux.unshift(aux.splice(ticketIndex, 1)[0]); return aux; } }); }; + console.log(tickets); + const deleteTicket = ({ ticketId }) => { setTickets(prevState => { const ticketIndex = prevState.findIndex(ticket => ticket.id === ticketId);