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; 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 => { 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(); let 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 }); io.emit("ticketStatus", { action: "update", ticketStatus: { ticketId: ticket.id, status: ticket.status } }); return { ticket, oldStatus, oldUserId }; }; export default UpdateTicketService;