import { subHours, subMinutes, subSeconds } from "date-fns"; import { Op } from "sequelize"; import BotIsOnQueue from "../../helpers/BotIsOnQueue"; import Contact from "../../models/Contact"; import Ticket from "../../models/Ticket"; import ShowWhatsAppService from "../WhatsappService/ShowWhatsAppService"; import ShowTicketService from "./ShowTicketService"; const FindOrCreateTicketService = async ( contact: Contact, whatsappId: number, unreadMessages: number, groupContact?: Contact ): Promise => { let ticket = await Ticket.findOne({ where: { status: { [Op.or]: ["open", "pending", "queueChoice"] }, contactId: groupContact ? groupContact.id : contact.id } }); const { queues, greetingMessage } = await ShowWhatsAppService(whatsappId); //Habilitar esse caso queira usar o bot // const botInfo = await BotIsOnQueue('botqueue') const botInfo = {isOnQueue: false} if (ticket) { await ticket.update({ unreadMessages }); } if (!ticket && groupContact) { ticket = await Ticket.findOne({ where: { contactId: groupContact.id }, order: [["updatedAt", "DESC"]] }); if (ticket) { await ticket.update({ status: "pending", userId: null, unreadMessages }); } } if (!ticket && !groupContact) { ticket = await Ticket.findOne({ where: { updatedAt: { //[Op.between]: [+subHours(new Date(), 2), +new Date()] // Tempo osioso para a ura responder thuanny //[Op.between]: [+subMinutes(new Date(), 30), +new Date()] // Sub seconds [Op.between]: [+subSeconds(new Date(), 0), +new Date()] }, contactId: contact.id }, order: [["updatedAt", "DESC"]] }); if (ticket) { await ticket.update({ status: "pending", userId: null, unreadMessages }); } } if (!ticket) { let status = "pending" if(queues.length > 1 && !botInfo.isOnQueue){ status = "queueChoice" } ticket = await Ticket.create({ contactId: groupContact ? groupContact.id : contact.id, status: status, isGroup: !!groupContact, unreadMessages, whatsappId }); } ticket = await ShowTicketService(ticket.id); return ticket; }; export default FindOrCreateTicketService;