diff --git a/backend/src/helpers/UpdateDeletedUserOpenTicketsStatus.ts b/backend/src/helpers/UpdateDeletedUserOpenTicketsStatus.ts new file mode 100644 index 0000000..60f8687 --- /dev/null +++ b/backend/src/helpers/UpdateDeletedUserOpenTicketsStatus.ts @@ -0,0 +1,32 @@ +import { getIO } from "../libs/socket"; +import Ticket from "../models/Ticket"; +import UpdateTicketService from "../services/TicketServices/UpdateTicketService"; + +const UpdateDeletedUserOpenTicketsStatus = async ( + tickets: Ticket[] +): Promise => { + tickets.forEach(async t => { + const ticketId = t.id.toString(); + + const { ticket, oldStatus, ticketUser } = await UpdateTicketService({ + ticketData: { status: "pending" }, + ticketId + }); + + const io = getIO(); + if (ticket.status !== oldStatus) { + io.to(oldStatus).emit("ticket", { + action: "delete", + ticketId: ticket.id + }); + } + + io.to(ticket.status).to(ticketId).emit("ticket", { + action: "updateStatus", + ticket, + user: ticketUser + }); + }); +}; + +export default UpdateDeletedUserOpenTicketsStatus; diff --git a/backend/src/services/UserServices/DeleteUserService.ts b/backend/src/services/UserServices/DeleteUserService.ts index f076730..a260eb8 100644 --- a/backend/src/services/UserServices/DeleteUserService.ts +++ b/backend/src/services/UserServices/DeleteUserService.ts @@ -1,5 +1,7 @@ import User from "../../models/User"; import AppError from "../../errors/AppError"; +import Ticket from "../../models/Ticket"; +import UpdateDeletedUserOpenTicketsStatus from "../../helpers/UpdateDeletedUserOpenTicketsStatus"; const DeleteUserService = async (id: string): Promise => { const user = await User.findOne({ @@ -10,6 +12,14 @@ const DeleteUserService = async (id: string): Promise => { throw new AppError("No user found with this ID.", 404); } + const userOpenTickets: Ticket[] = await user.$get("tickets", { + where: { status: "open" } + }); + + if (userOpenTickets.length > 0) { + UpdateDeletedUserOpenTicketsStatus(userOpenTickets); + } + await user.destroy(); };