fix: tickets not disappearing for users that are not members of queue after queue assignment

This commit is contained in:
canove
2021-01-14 12:20:41 -03:00
parent 2cc7b4e508
commit f7f0b01eb3
6 changed files with 41 additions and 38 deletions

View File

@@ -85,25 +85,11 @@ export const update = async (
const { ticketId } = req.params; const { ticketId } = req.params;
const ticketData: TicketData = req.body; const ticketData: TicketData = req.body;
const { ticket, oldStatus, oldUserId } = await UpdateTicketService({ const { ticket } = await UpdateTicketService({
ticketData, ticketData,
ticketId 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); return res.status(200).json(ticket);
}; };

View File

@@ -1,4 +1,3 @@
import { getIO } from "../libs/socket";
import Ticket from "../models/Ticket"; import Ticket from "../models/Ticket";
import UpdateTicketService from "../services/TicketServices/UpdateTicketService"; import UpdateTicketService from "../services/TicketServices/UpdateTicketService";
@@ -8,23 +7,10 @@ const UpdateDeletedUserOpenTicketsStatus = async (
tickets.forEach(async t => { tickets.forEach(async t => {
const ticketId = t.id.toString(); const ticketId = t.id.toString();
const { ticket, oldStatus } = await UpdateTicketService({ await UpdateTicketService({
ticketData: { status: "pending" }, ticketData: { status: "pending" },
ticketId 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
});
}); });
}; };

View File

@@ -1,16 +1,18 @@
import CheckContactOpenTickets from "../../helpers/CheckContactOpenTickets"; import CheckContactOpenTickets from "../../helpers/CheckContactOpenTickets";
import SetTicketMessagesAsRead from "../../helpers/SetTicketMessagesAsRead"; import SetTicketMessagesAsRead from "../../helpers/SetTicketMessagesAsRead";
import { getIO } from "../../libs/socket";
import Ticket from "../../models/Ticket"; import Ticket from "../../models/Ticket";
import ShowTicketService from "./ShowTicketService"; import ShowTicketService from "./ShowTicketService";
interface TicketData { interface TicketData {
status?: string; status?: string;
userId?: number; userId?: number;
queueId?: number;
} }
interface Request { interface Request {
ticketData: TicketData; ticketData: TicketData;
ticketId: string; ticketId: string | number;
} }
interface Response { interface Response {
@@ -23,7 +25,7 @@ const UpdateTicketService = async ({
ticketData, ticketData,
ticketId ticketId
}: Request): Promise<Response> => { }: Request): Promise<Response> => {
const { status, userId } = ticketData; const { status, userId, queueId } = ticketData;
const ticket = await ShowTicketService(ticketId); const ticket = await ShowTicketService(ticketId);
@@ -38,11 +40,29 @@ const UpdateTicketService = async ({
await ticket.update({ await ticket.update({
status, status,
queueId,
userId userId
}); });
await ticket.reload(); 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 }; return { ticket, oldStatus, oldUserId };
}; };

View File

@@ -21,6 +21,7 @@ import CreateOrUpdateContactService from "../ContactServices/CreateOrUpdateConta
import FindOrCreateTicketService from "../TicketServices/FindOrCreateTicketService"; import FindOrCreateTicketService from "../TicketServices/FindOrCreateTicketService";
import ShowWhatsAppService from "../WhatsappService/ShowWhatsAppService"; import ShowWhatsAppService from "../WhatsappService/ShowWhatsAppService";
import { debounce } from "../../helpers/Debounce"; import { debounce } from "../../helpers/Debounce";
import UpdateTicketService from "../TicketServices/UpdateTicketService";
interface Session extends Client { interface Session extends Client {
id?: number; id?: number;
@@ -137,8 +138,11 @@ const verifyQueue = async (
const { queues, greetingMessage } = await ShowWhatsAppService(wbot.id!); const { queues, greetingMessage } = await ShowWhatsAppService(wbot.id!);
if (queues.length === 1) { if (queues.length === 1) {
await ticket.$set("queue", queues[0]); // await ticket.$set("queue", queues[0].id);
// TODO sendTicketQueueUpdate to frontend await UpdateTicketService({
ticketData: { queueId: queues[0].id },
ticketId: ticket.id
});
return; return;
} }
@@ -148,15 +152,16 @@ const verifyQueue = async (
const choosenQueue = queues[+selectedOption - 1]; const choosenQueue = queues[+selectedOption - 1];
if (choosenQueue) { if (choosenQueue) {
await ticket.$set("queue", choosenQueue); await UpdateTicketService({
ticketData: { queueId: choosenQueue.id },
ticketId: ticket.id
});
const body = `\u200e${choosenQueue.greetingMessage}`; const body = `\u200e${choosenQueue.greetingMessage}`;
const sentMessage = await wbot.sendMessage(`${contact.number}@c.us`, body); const sentMessage = await wbot.sendMessage(`${contact.number}@c.us`, body);
await verifyMessage(sentMessage, ticket, contact); await verifyMessage(sentMessage, ticket, contact);
// TODO sendTicketQueueUpdate to frontend
} else { } else {
let options = ""; let options = "";

View File

@@ -187,6 +187,9 @@ const TicketsList = ({ status, searchParam, showAll, selectedQueueIds }) => {
(!ticket.userId || ticket.userId === user?.id || showAll) && (!ticket.userId || ticket.userId === user?.id || showAll) &&
(!ticket.queueId || selectedQueueIds.indexOf(ticket.queueId) > -1); (!ticket.queueId || selectedQueueIds.indexOf(ticket.queueId) > -1);
const notBelongsToUserQueues = ticket =>
selectedQueueIds.indexOf(ticket.queueId) === -1;
socket.on("connect", () => { socket.on("connect", () => {
if (status) { if (status) {
socket.emit("joinTickets", 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") { if (data.action === "delete") {
dispatch({ type: "DELETE_TICKET", payload: data.ticketId }); dispatch({ type: "DELETE_TICKET", payload: data.ticketId });
} }

View File

@@ -13,7 +13,6 @@ export function useLocalStorage(key, initialValue) {
}); });
const setValue = value => { const setValue = value => {
console.log("SETTING VALUE", value);
try { try {
const valueToStore = const valueToStore =
value instanceof Function ? value(storedValue) : value; value instanceof Function ? value(storedValue) : value;