2022-04-20 19:01:58 +00:00
|
|
|
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";
|
|
|
|
|
2023-06-29 09:01:37 +00:00
|
|
|
import { Sequelize } from "sequelize";
|
|
|
|
import moment from 'moment';
|
|
|
|
|
|
|
|
import { startOfDay, endOfDay, parseISO, getDate, subSeconds } from "date-fns";
|
2022-04-20 19:01:58 +00:00
|
|
|
import { string } from "yup/lib/locale";
|
|
|
|
|
2023-06-29 09:01:37 +00:00
|
|
|
|
|
|
|
function paramsQuery(params: string[]) {
|
|
|
|
|
|
|
|
let like = []
|
|
|
|
|
|
|
|
for (let i = 0; i < params.length; i++) {
|
|
|
|
like.push({ [Op.like]: `%${params[i]}%` })
|
|
|
|
}
|
|
|
|
return like
|
|
|
|
}
|
|
|
|
|
2022-04-20 19:01:58 +00:00
|
|
|
//Report by user, startDate, endDate
|
2023-06-29 09:01:37 +00:00
|
|
|
const ShowTicketMessage = async (
|
|
|
|
ticketId: string | number,
|
2023-07-06 13:04:26 +00:00
|
|
|
limit: number,
|
|
|
|
fromMe: boolean,
|
|
|
|
params?: string[],
|
|
|
|
onlyNumber?: boolean,
|
2023-06-29 09:01:37 +00:00
|
|
|
regexp?: string): Promise<Message[]> => {
|
|
|
|
|
2022-04-20 19:01:58 +00:00
|
|
|
let where_clause = {}
|
|
|
|
|
2023-06-29 09:01:37 +00:00
|
|
|
if (onlyNumber) {
|
|
|
|
where_clause = {
|
|
|
|
ticketId: ticketId,
|
|
|
|
fromMe: fromMe ? fromMe : 0,
|
|
|
|
body: { [Op.regexp]: regexp },
|
|
|
|
}
|
2022-04-20 19:01:58 +00:00
|
|
|
}
|
2023-07-06 13:04:26 +00:00
|
|
|
else if (params && params.length > 0) {
|
2023-06-29 09:01:37 +00:00
|
|
|
where_clause = {
|
|
|
|
ticketId: ticketId,
|
|
|
|
fromMe: fromMe ? fromMe : 0,
|
2023-06-27 23:17:09 +00:00
|
|
|
updatedAt: {
|
2023-06-29 09:01:37 +00:00
|
|
|
[Op.between]: [+subSeconds(new Date(), 50), +new Date()],
|
2023-06-27 23:17:09 +00:00
|
|
|
},
|
|
|
|
body: {
|
2023-06-29 09:01:37 +00:00
|
|
|
[Op.or]: paramsQuery(params)
|
2023-07-06 13:04:26 +00:00
|
|
|
}
|
2023-06-29 09:01:37 +00:00
|
|
|
}
|
2022-04-20 19:01:58 +00:00
|
|
|
}
|
2023-07-06 13:04:26 +00:00
|
|
|
else {
|
|
|
|
|
2023-06-29 20:48:24 +00:00
|
|
|
where_clause = {
|
|
|
|
ticketId: ticketId,
|
|
|
|
fromMe: fromMe ? fromMe : 0,
|
2023-07-06 13:04:26 +00:00
|
|
|
}
|
2023-06-29 20:48:24 +00:00
|
|
|
|
2023-07-06 13:04:26 +00:00
|
|
|
}
|
2022-04-20 19:01:58 +00:00
|
|
|
|
|
|
|
|
2023-06-29 09:01:37 +00:00
|
|
|
const ticket = await Message.findAll({
|
|
|
|
|
|
|
|
where: where_clause,
|
2023-07-06 13:04:26 +00:00
|
|
|
limit: limit,
|
2023-06-29 09:01:37 +00:00
|
|
|
raw: true,
|
|
|
|
attributes: ['body', 'read', 'mediaType', 'fromMe', 'mediaUrl', [Sequelize.fn("DATE_FORMAT", Sequelize.col("createdAt"), "%d/%m/%Y %H:%i:%s"), "createdAt"]],
|
2022-04-20 19:01:58 +00:00
|
|
|
|
|
|
|
order: [
|
|
|
|
['createdAt', 'DESC']
|
2023-06-29 09:01:37 +00:00
|
|
|
]
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
2022-04-20 19:01:58 +00:00
|
|
|
if (!ticket) {
|
|
|
|
throw new AppError("ERR_NO_TICKET_FOUND", 404);
|
|
|
|
}
|
|
|
|
|
|
|
|
return ticket;
|
2023-06-29 09:01:37 +00:00
|
|
|
};
|
2022-04-20 19:01:58 +00:00
|
|
|
|
|
|
|
export default ShowTicketMessage;
|