From f7f0b01eb363da62a7249a01ef7a353cfb23c722 Mon Sep 17 00:00:00 2001 From: canove Date: Thu, 14 Jan 2021 12:20:41 -0300 Subject: [PATCH] fix: tickets not disappearing for users that are not members of queue after queue assignment --- backend/src/controllers/TicketController.ts | 16 +------------ .../UpdateDeletedUserOpenTicketsStatus.ts | 16 +------------ .../TicketServices/UpdateTicketService.ts | 24 +++++++++++++++++-- .../WbotServices/wbotMessageListener.ts | 15 ++++++++---- frontend/src/components/TicketsList/index.js | 7 ++++++ frontend/src/hooks/useLocalStorage/index.js | 1 - 6 files changed, 41 insertions(+), 38 deletions(-) diff --git a/backend/src/controllers/TicketController.ts b/backend/src/controllers/TicketController.ts index 93b03c1..bd6da64 100644 --- a/backend/src/controllers/TicketController.ts +++ b/backend/src/controllers/TicketController.ts @@ -85,25 +85,11 @@ export const update = async ( const { ticketId } = req.params; const ticketData: TicketData = req.body; - const { ticket, oldStatus, oldUserId } = await UpdateTicketService({ + const { ticket } = await UpdateTicketService({ ticketData, ticketId }); - const io = getIO(); - - if (ticket.status !== oldStatus || ticket.user?.id !== oldUserId) { - io.to(oldStatus).emit("ticket", { - action: "delete", - ticketId: ticket.id - }); - } - - io.to(ticket.status).to("notification").to(ticketId).emit("ticket", { - action: "update", - ticket - }); - return res.status(200).json(ticket); }; diff --git a/backend/src/helpers/UpdateDeletedUserOpenTicketsStatus.ts b/backend/src/helpers/UpdateDeletedUserOpenTicketsStatus.ts index 110ba03..6e05ffb 100644 --- a/backend/src/helpers/UpdateDeletedUserOpenTicketsStatus.ts +++ b/backend/src/helpers/UpdateDeletedUserOpenTicketsStatus.ts @@ -1,4 +1,3 @@ -import { getIO } from "../libs/socket"; import Ticket from "../models/Ticket"; import UpdateTicketService from "../services/TicketServices/UpdateTicketService"; @@ -8,23 +7,10 @@ const UpdateDeletedUserOpenTicketsStatus = async ( tickets.forEach(async t => { const ticketId = t.id.toString(); - const { ticket, oldStatus } = await UpdateTicketService({ + await UpdateTicketService({ ticketData: { status: "pending" }, ticketId }); - - const io = getIO(); - if (ticket.status !== oldStatus) { - io.to(oldStatus).emit("ticket", { - action: "delete", - ticketId: ticket.id - }); - } - - io.to(ticket.status).to(ticketId).emit("ticket", { - action: "updateStatus", - ticket - }); }); }; diff --git a/backend/src/services/TicketServices/UpdateTicketService.ts b/backend/src/services/TicketServices/UpdateTicketService.ts index d7f7bfa..4c36fe9 100644 --- a/backend/src/services/TicketServices/UpdateTicketService.ts +++ b/backend/src/services/TicketServices/UpdateTicketService.ts @@ -1,16 +1,18 @@ import CheckContactOpenTickets from "../../helpers/CheckContactOpenTickets"; import SetTicketMessagesAsRead from "../../helpers/SetTicketMessagesAsRead"; +import { getIO } from "../../libs/socket"; import Ticket from "../../models/Ticket"; import ShowTicketService from "./ShowTicketService"; interface TicketData { status?: string; userId?: number; + queueId?: number; } interface Request { ticketData: TicketData; - ticketId: string; + ticketId: string | number; } interface Response { @@ -23,7 +25,7 @@ const UpdateTicketService = async ({ ticketData, ticketId }: Request): Promise => { - const { status, userId } = ticketData; + const { status, userId, queueId } = ticketData; const ticket = await ShowTicketService(ticketId); @@ -38,11 +40,29 @@ const UpdateTicketService = async ({ await ticket.update({ status, + queueId, userId }); await ticket.reload(); + const io = getIO(); + + if (ticket.status !== oldStatus || ticket.user?.id !== oldUserId) { + io.to(oldStatus).emit("ticket", { + action: "delete", + ticketId: ticket.id + }); + } + + io.to(ticket.status) + .to("notification") + .to(ticketId.toString()) + .emit("ticket", { + action: "update", + ticket + }); + return { ticket, oldStatus, oldUserId }; }; diff --git a/backend/src/services/WbotServices/wbotMessageListener.ts b/backend/src/services/WbotServices/wbotMessageListener.ts index 35c518f..c19deca 100644 --- a/backend/src/services/WbotServices/wbotMessageListener.ts +++ b/backend/src/services/WbotServices/wbotMessageListener.ts @@ -21,6 +21,7 @@ import CreateOrUpdateContactService from "../ContactServices/CreateOrUpdateConta import FindOrCreateTicketService from "../TicketServices/FindOrCreateTicketService"; import ShowWhatsAppService from "../WhatsappService/ShowWhatsAppService"; import { debounce } from "../../helpers/Debounce"; +import UpdateTicketService from "../TicketServices/UpdateTicketService"; interface Session extends Client { id?: number; @@ -137,8 +138,11 @@ const verifyQueue = async ( const { queues, greetingMessage } = await ShowWhatsAppService(wbot.id!); if (queues.length === 1) { - await ticket.$set("queue", queues[0]); - // TODO sendTicketQueueUpdate to frontend + // await ticket.$set("queue", queues[0].id); + await UpdateTicketService({ + ticketData: { queueId: queues[0].id }, + ticketId: ticket.id + }); return; } @@ -148,15 +152,16 @@ const verifyQueue = async ( const choosenQueue = queues[+selectedOption - 1]; if (choosenQueue) { - await ticket.$set("queue", choosenQueue); + await UpdateTicketService({ + ticketData: { queueId: choosenQueue.id }, + ticketId: ticket.id + }); const body = `\u200e${choosenQueue.greetingMessage}`; const sentMessage = await wbot.sendMessage(`${contact.number}@c.us`, body); await verifyMessage(sentMessage, ticket, contact); - - // TODO sendTicketQueueUpdate to frontend } else { let options = ""; diff --git a/frontend/src/components/TicketsList/index.js b/frontend/src/components/TicketsList/index.js index f771154..50fc1af 100644 --- a/frontend/src/components/TicketsList/index.js +++ b/frontend/src/components/TicketsList/index.js @@ -187,6 +187,9 @@ const TicketsList = ({ status, searchParam, showAll, selectedQueueIds }) => { (!ticket.userId || ticket.userId === user?.id || showAll) && (!ticket.queueId || selectedQueueIds.indexOf(ticket.queueId) > -1); + const notBelongsToUserQueues = ticket => + selectedQueueIds.indexOf(ticket.queueId) === -1; + socket.on("connect", () => { if (status) { socket.emit("joinTickets", status); @@ -210,6 +213,10 @@ const TicketsList = ({ status, searchParam, showAll, selectedQueueIds }) => { }); } + if (data.action === "update" && notBelongsToUserQueues(data.ticket)) { + dispatch({ type: "DELETE_TICKET", payload: data.ticket.id }); + } + if (data.action === "delete") { dispatch({ type: "DELETE_TICKET", payload: data.ticketId }); } diff --git a/frontend/src/hooks/useLocalStorage/index.js b/frontend/src/hooks/useLocalStorage/index.js index ffb7af8..3a6ee35 100644 --- a/frontend/src/hooks/useLocalStorage/index.js +++ b/frontend/src/hooks/useLocalStorage/index.js @@ -13,7 +13,6 @@ export function useLocalStorage(key, initialValue) { }); const setValue = value => { - console.log("SETTING VALUE", value); try { const valueToStore = value instanceof Function ? value(storedValue) : value;