import Ticket from "../../models/Ticket"; import AppError from "../../errors/AppError"; import Contact from "../../models/Contact"; import User from "../../models/User"; import Queue from "../../models/Queue"; import Message from "../../models/Message"; import { userInfo } from "os"; import { Op, where } from "sequelize"; import { Sequelize } from "sequelize"; import moment from 'moment'; import { startOfDay, endOfDay, parseISO, getDate, subSeconds } from "date-fns"; import { string } from "yup/lib/locale"; function paramsQuery(params: string[]) { let like = [] for (let i = 0; i < params.length; i++) { like.push({ [Op.like]: `%${params[i]}%` }) } return like } //Report by user, startDate, endDate const ShowTicketMessage = async ( ticketId: string | number, limit: number, fromMe: boolean, params?: string[], onlyNumber?: boolean, regexp?: string): Promise => { let where_clause = {} if (onlyNumber) { where_clause = { ticketId: ticketId, fromMe: fromMe ? fromMe : 0, body: { [Op.regexp]: regexp }, } } else if (params && params.length > 0) { where_clause = { ticketId: ticketId, fromMe: fromMe ? fromMe : 0, updatedAt: { [Op.between]: [+subSeconds(new Date(), 50), +new Date()], }, body: { [Op.or]: paramsQuery(params) } } } else { where_clause = { ticketId: ticketId, fromMe: fromMe ? fromMe : 0, } } const ticket = await Message.findAll({ where: where_clause, limit: limit, raw: true, attributes: ['body', 'read', 'mediaType', 'fromMe', 'mediaUrl', [Sequelize.fn("DATE_FORMAT", Sequelize.col("createdAt"), "%d/%m/%Y %H:%i:%s"), "createdAt"]], order: [ ['createdAt', 'DESC'] ] }); if (!ticket) { throw new AppError("ERR_NO_TICKET_FOUND", 404); } return ticket; }; export default ShowTicketMessage;