import { subHours, subMinutes, subSeconds } from "date-fns"; import { Op } from "sequelize"; import Contact from "../../models/Contact"; import Ticket from "../../models/Ticket"; 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"] }, contactId: groupContact ? groupContact.id : contact.id } }); 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()] }, contactId: contact.id }, order: [["updatedAt", "DESC"]] }); if (ticket) { await ticket.update({ status: "pending", userId: null, unreadMessages }); } } if (!ticket) { ticket = await Ticket.create({ contactId: groupContact ? groupContact.id : contact.id, status: "pending", isGroup: !!groupContact, unreadMessages, whatsappId }); } ticket = await ShowTicketService(ticket.id); return ticket; }; export default FindOrCreateTicketService;