57 lines
1.3 KiB
TypeScript
57 lines
1.3 KiB
TypeScript
|
import { subSeconds } from "date-fns";
|
||
|
import Message from "../models/Message";
|
||
|
|
||
|
import { Op, Sequelize } from "sequelize";
|
||
|
|
||
|
const mostRepeatedPhrase = async (
|
||
|
ticketId: number | string,
|
||
|
fromMe: boolean = false
|
||
|
) => {
|
||
|
let res: any = { body: "", occurrences: 0 };
|
||
|
|
||
|
try {
|
||
|
const mostRepeatedPhrase: any = await Message.findOne({
|
||
|
where: {
|
||
|
ticketId: ticketId,
|
||
|
fromMe: fromMe ? fromMe : 0,
|
||
|
body: {
|
||
|
[Op.notRegexp]: "^[0-9]+$"
|
||
|
},
|
||
|
updatedAt: {
|
||
|
[Op.between]: [+subSeconds(new Date(), 150), +new Date()]
|
||
|
}
|
||
|
},
|
||
|
attributes: [
|
||
|
"body",
|
||
|
[Sequelize.fn("COUNT", Sequelize.col("body")), "occurrences"]
|
||
|
],
|
||
|
|
||
|
group: ["body"],
|
||
|
order: [[Sequelize.literal("occurrences"), "DESC"]],
|
||
|
limit: 1
|
||
|
});
|
||
|
|
||
|
if (mostRepeatedPhrase) {
|
||
|
const { body, occurrences } = mostRepeatedPhrase.get();
|
||
|
|
||
|
console.log(
|
||
|
`The most repeated phrase is "${body}" with ${occurrences} occurrences.`
|
||
|
);
|
||
|
|
||
|
const isNumber = /^\d+$/.test(body.trim());
|
||
|
|
||
|
if (!isNumber) {
|
||
|
return { body, occurrences };
|
||
|
}
|
||
|
} else {
|
||
|
console.log("No phrases found.");
|
||
|
}
|
||
|
} catch (error) {
|
||
|
console.log("error on MostRepeatedPhrase: ", error);
|
||
|
}
|
||
|
|
||
|
return { body: "", occurrences: 0 };
|
||
|
};
|
||
|
|
||
|
export default mostRepeatedPhrase;
|