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

105 lines
2.5 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";
import { createOrUpdateTicketCache } from '../../helpers/TicketCache'
var flatten = require('flat')
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();
// TEST DEL
try {
// const { name, number } = await ShowContactService(ticket.contactId)
let jsonString = JSON.stringify(ticket); //convert to string to remove the sequelize specific meta data
let ticket_obj = JSON.parse(jsonString); //to make plain json
delete ticket_obj['contact']['extraInfo']
delete ticket_obj['user']
ticket_obj = flatten(ticket_obj)
await createOrUpdateTicketCache(`ticket:${ticket.id}`, ticket_obj)
} catch (error) {
console.log('There was an error on UpdateTicketService.ts on createTicketCache: ', error)
}
//
2022-08-09 18:44:28 +00:00
let io = getIO();
if (ticket.status !== oldStatus || ticket.user?.id !== oldUserId) {
io.to(oldStatus).emit("ticket", {
action: "delete",
ticketId: ticket.id
});
2022-08-09 18:44:28 +00:00
}
io.to(ticket.status)
.to("notification")
.to(ticketId.toString())
.emit("ticket", {
action: "update",
ticket
});
2022-08-08 18:28:47 +00:00
2022-08-09 18:44:28 +00:00
io.emit("ticketStatus", {
2022-08-08 18:28:47 +00:00
action: "update",
2022-08-09 18:44:28 +00:00
ticketStatus: { ticketId: ticket.id, status: ticket.status }
});
2022-08-08 18:28:47 +00:00
return { ticket, oldStatus, oldUserId };
};
export default UpdateTicketService;