import AppError from "../../errors/AppError"; import CheckContactOpenTickets from "../../helpers/CheckContactOpenTickets"; import GetDefaultWhatsApp from "../../helpers/GetDefaultWhatsApp"; import Ticket from "../../models/Ticket"; import ShowContactService from "../ContactServices/ShowContactService"; import { getIO } from "../../libs/socket"; import ShowUserServiceReport from "../UserServices/ShowUserServiceReport"; import format from 'date-fns/format'; import ptBR from 'date-fns/locale/pt-BR'; import { splitDateTime } from "../../helpers/SplitDateTime"; import TicketEmiterSumOpenClosedByUser from "../../helpers/OnlineReporEmiterInfoByUser"; import { createOrUpdateTicketCache } from '../../helpers/TicketCache' import ShowQueuesByUser from "../UserServices/ShowQueuesByUser"; import ShowWhatsAppService from "../WhatsappService/ShowWhatsAppService"; import Whatsapp from "../../models/Whatsapp"; import whatsappQueueMatchingUserQueue from "../../helpers/whatsappQueueMatchingUserQueue"; import User from "../../models/User"; import sendWhatsAppMessageSocket from "../../helpers/SendWhatsappMessageSocket"; let flatten = require('flat') interface Request { contactId: number; status: string; userId: number; msg?: string } const CreateTicketService = async ({ contactId, status, userId, msg = '' }: Request): Promise => { try { console.log('Create contact service........') const defaultWhatsapp = await GetDefaultWhatsApp(userId); const user = await User.findByPk(userId, { raw: true, }) console.log('user.profile: ', user?.profile) const matchingQueue = await whatsappQueueMatchingUserQueue(userId, defaultWhatsapp, user?.profile); console.log('matchingQueue: ', matchingQueue) const queueId = matchingQueue ? matchingQueue.queueId : undefined await CheckContactOpenTickets(contactId); const { isGroup } = await ShowContactService(contactId); const { id }: Ticket = await defaultWhatsapp.$create("ticket", { contactId, status, isGroup, userId, queueId }); console.log('TICKET CREATED!') const ticket = await Ticket.findByPk(id, { include: ["contact"] }); if (!ticket) { throw new AppError("ERR_CREATING_TICKET"); } // console.log('CONTACT ticket.id: ', ticket.id) // console.log('>>>>>>>>>>>>>>>>> msg: ', msg) if (msg.length > 0) { sendWhatsAppMessageSocket(ticket, msg) } try { 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'] 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 from user: ', error) } const dateToday = splitDateTime(new Date(format(new Date(), 'yyyy-MM-dd HH:mm:ss', { locale: ptBR }))) TicketEmiterSumOpenClosedByUser(userId.toString(), dateToday.fullDate, dateToday.fullDate) const io = getIO(); io.emit("ticketStatus", { action: "update", ticketStatus: { ticketId: ticket.id, status: ticket.status } }); return ticket; } catch (error: any) { console.error('===> Error on CreateTicketService.ts file: \n', error) throw new AppError(error.message); } }; export default CreateTicketService;