projeto-hit/backend/src/services/TicketServices/ShowTicketMessage.ts

91 lines
1.9 KiB
TypeScript
Raw Normal View History

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<Message[]> => {
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;