projeto-hit/backend/src/services/TicketServices/UpdateTicketService.ts

83 lines
1.8 KiB
TypeScript
Raw Normal View History

import CheckContactOpenTickets from "../../helpers/CheckContactOpenTickets";
import SetTicketMessagesAsRead from "../../helpers/SetTicketMessagesAsRead";
import { getIO } from "../../libs/socket";
import Ticket from "../../models/Ticket";
import SendWhatsAppMessage from "../WbotServices/SendWhatsAppMessage";
import ShowWhatsAppService from "../WhatsappService/ShowWhatsAppService";
import ShowTicketService from "./ShowTicketService";
interface TicketData {
status?: string;
userId?: number;
queueId?: number;
2022-08-08 18:28:47 +00:00
statusChatEnd?: string
}
interface Request {
ticketData: TicketData;
ticketId: string | number;
}
interface Response {
ticket: Ticket;
oldStatus: string;
oldUserId: number | undefined;
}
const UpdateTicketService = async ({
ticketData,
ticketId
}: Request): Promise<Response> => {
const { status, userId, queueId, statusChatEnd } = ticketData;
const ticket = await ShowTicketService(ticketId);
await SetTicketMessagesAsRead(ticket);
const oldStatus = ticket.status;
const oldUserId = ticket.user?.id;
if (oldStatus === "closed") {
await CheckContactOpenTickets(ticket.contact.id);
}
await ticket.update({
status,
queueId,
userId,
statusChatEnd
});
await ticket.reload();
const io = getIO();
if (ticket.status !== oldStatus || ticket.user?.id !== oldUserId) {
io.to(oldStatus).emit("ticket", {
action: "delete",
ticketId: ticket.id
});
2022-08-08 18:28:47 +00:00
}
io.to(ticket.status)
.to("notification")
.to(ticketId.toString())
.emit("ticket", {
action: "update",
ticket
});
2022-08-08 18:28:47 +00:00
io.emit("ticketStatus", {
action: "update",
ticketStatus: {ticketId: ticket.id, status: ticket.status}
});
return { ticket, oldStatus, oldUserId };
};
export default UpdateTicketService;