import { Request, Response } from "express"; import { getIO } from "../libs/socket"; import CreateTicketService from "../services/TicketServices/CreateTicketService"; import DeleteTicketService from "../services/TicketServices/DeleteTicketService"; import ListTicketsService from "../services/TicketServices/ListTicketsService"; import ShowTicketService from "../services/TicketServices/ShowTicketService"; import UpdateTicketService from "../services/TicketServices/UpdateTicketService"; import SendWhatsAppMessage from "../services/WbotServices/SendWhatsAppMessage"; import ShowWhatsAppService from "../services/WhatsappService/ShowWhatsAppService"; type IndexQuery = { searchParam: string; pageNumber: string; status: string; date: string; showAll: string; withUnreadMessages: string; queueIds: string; }; interface TicketData { contactId: number; status: string; queueId: number; userId: number; } import ListScheduleService from "../services/ScheduleService/ListScheduleService"; export const index = async (req: Request, res: Response): Promise => { const { pageNumber, status, date, searchParam, showAll, queueIds: queueIdsStringified, withUnreadMessages } = req.query as IndexQuery; const userId = req.user.id; let queueIds: number[] = []; if (queueIdsStringified) { queueIds = JSON.parse(queueIdsStringified); } const { tickets, count, hasMore } = await ListTicketsService({ searchParam, pageNumber, status, date, showAll, userId, queueIds, withUnreadMessages }); return res.status(200).json({ tickets, count, hasMore }); }; export const store = async (req: Request, res: Response): Promise => { const { contactId, status, userId }: TicketData = req.body; const ticket = await CreateTicketService({ contactId, status, userId }); const io = getIO(); io.to(ticket.status).emit("ticket", { action: "update", ticket }); return res.status(200).json(ticket); }; export const show = async (req: Request, res: Response): Promise => { const { ticketId } = req.params; const contact = await ShowTicketService(ticketId); const { schedules, count, hasMore } = await ListScheduleService({ searchParam: "", pageNumber: "1" }); // return res.status(200).json(contact); return res.status(200).json({contact, schedules}); }; export const update = async ( req: Request, res: Response): Promise => { const { ticketId } = req.params; const ticketData: TicketData = req.body; // const { contactId, status, queueId, userId, schedulingNotify} = req.body const { ticket } = await UpdateTicketService({ ticketData, ticketId }); if (ticket.status === "closed") { const whatsapp = await ShowWhatsAppService(ticket.whatsappId); const { farewellMessage } = whatsapp; if (farewellMessage) { await SendWhatsAppMessage({ body: farewellMessage, ticket }); } } return res.status(200).json(ticket); }; export const remove = async ( req: Request, res: Response ): Promise => { const { ticketId } = req.params; const ticket = await DeleteTicketService(ticketId); const io = getIO(); io.to(ticket.status) .to(ticketId) .to("notification") .emit("ticket", { action: "delete", ticketId: +ticketId }); return res.status(200).json({ message: "ticket deleted" }); };