diff --git a/backend/src/helpers/CheckContactOpenTickets.ts b/backend/src/helpers/CheckContactOpenTickets.ts new file mode 100644 index 0000000..0ebd556 --- /dev/null +++ b/backend/src/helpers/CheckContactOpenTickets.ts @@ -0,0 +1,17 @@ +import { Op } from "sequelize"; +import AppError from "../errors/AppError"; +import Ticket from "../models/Ticket"; + +const CheckContactOpenTickets = async (contactId: number): Promise => { + const ticket = await Ticket.findOne({ + where: { contactId, status: { [Op.or]: ["open", "pending"] } } + }); + + if (ticket) { + throw new AppError( + "There's already an open or pending ticket for this contact." + ); + } +}; + +export default CheckContactOpenTickets; diff --git a/backend/src/services/TicketServices/CreateTicketService.ts b/backend/src/services/TicketServices/CreateTicketService.ts index 9131669..5abffdd 100644 --- a/backend/src/services/TicketServices/CreateTicketService.ts +++ b/backend/src/services/TicketServices/CreateTicketService.ts @@ -1,4 +1,5 @@ import AppError from "../../errors/AppError"; +import CheckContactOpenTickets from "../../helpers/CheckContactOpenTickets"; import GetDefaultWhatsApp from "../../helpers/GetDefaultWhatsApp"; import Ticket from "../../models/Ticket"; @@ -19,6 +20,8 @@ const CreateTicketService = async ({ throw new AppError("No default WhatsApp found. Check Connection page."); } + await CheckContactOpenTickets(contactId); + const { id }: Ticket = await defaultWhatsapp.$create("ticket", { contactId, status,