Skip to content

Commit ad210c0

Browse files
authored
Corrige el envío de nombres de tickets incorrectos en correos electrónicos de QR (#262)
Este PR corrige un error en la función `sendActualUserTicketQREmails` que causaba que todos los correos electrónicos se enviaran con el mismo nombre de ticket, independientemente de las diferentes plantillas de tickets involucradas. Problema anterior: - Se utilizaba el nombre de la primera plantilla de ticket (`userTickets[0].ticketTemplate.name`) para todos los correos electrónicos, lo que resultaba en información incorrecta para los usuarios. Solución: 1. Se introduce una consulta para obtener todas las plantillas de tickets únicas involucradas. 2. Se implementa un bucle que procesa cada plantilla de ticket por separado. 3. Para cada plantilla, se filtran los tickets de usuario correspondientes. 4. Se envían los correos electrónicos en lotes, utilizando el nombre correcto de cada plantilla de ticket. Cambios adicionales: - Se optimizaron las consultas a la base de datos especificando solo las columnas necesarias.
1 parent 5a4ce07 commit ad210c0

1 file changed

Lines changed: 74 additions & 39 deletions

File tree

src/notifications/tickets.ts

Lines changed: 74 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -172,13 +172,29 @@ export const sendActualUserTicketQREmails = async ({
172172
const userTickets = await DB.query.userTicketsSchema.findMany({
173173
where: (t, { inArray }) => inArray(t.id, userTicketIds),
174174
with: {
175-
user: true,
175+
user: {
176+
columns: {
177+
name: true,
178+
email: true,
179+
id: true,
180+
},
181+
},
176182
ticketTemplate: {
183+
columns: {
184+
id: true,
185+
},
177186
with: {
178-
event: true,
187+
event: {
188+
columns: {
189+
id: true,
190+
},
191+
},
179192
},
180193
},
181194
},
195+
columns: {
196+
id: true,
197+
},
182198
});
183199

184200
if (userTickets.length === 0) {
@@ -191,47 +207,66 @@ export const sendActualUserTicketQREmails = async ({
191207
);
192208
}
193209

194-
const to: {
195-
name?: string;
196-
email: string;
197-
tags: { name: string; value: string }[];
198-
userTicketId: string;
199-
}[] = [];
210+
const uniqueTicketTemplates = await DB.query.ticketsSchema.findMany({
211+
where: (t, { inArray }) =>
212+
inArray(
213+
t.id,
214+
userTickets.map((t) => t.ticketTemplate.id),
215+
),
216+
with: {
217+
event: true,
218+
},
219+
});
200220

201-
userTickets.forEach((userTicket) => {
202-
if (!userTicket.user) {
203-
return null;
204-
}
221+
for (let i = 0; i < uniqueTicketTemplates.length; i++) {
222+
const ticketTemplate = uniqueTicketTemplates[i];
205223

206-
to.push({
207-
name: userTicket.user.name ?? undefined,
208-
email: userTicket.user.email,
209-
userTicketId: userTicket.id,
210-
tags: [
211-
{
212-
name: "userTicket",
213-
value: userTicket.id,
214-
},
215-
{
216-
name: "ticketId",
217-
value: userTicket.ticketTemplate.id,
218-
},
219-
{
220-
name: "eventId",
221-
value: userTicket.ticketTemplate.event.id,
222-
},
223-
{
224-
name: "userId",
225-
value: userTicket.user.id,
226-
},
227-
],
224+
const usersTicketsForTemplate = userTickets.filter(
225+
(t) => t.ticketTemplate.id === ticketTemplate.id,
226+
);
227+
228+
const to: {
229+
name?: string;
230+
email: string;
231+
tags: { name: string; value: string }[];
232+
userTicketId: string;
233+
}[] = [];
234+
235+
usersTicketsForTemplate.forEach((userTicket) => {
236+
if (!userTicket.user) {
237+
return null;
238+
}
239+
240+
to.push({
241+
name: userTicket.user.name ?? undefined,
242+
email: userTicket.user.email,
243+
userTicketId: userTicket.id,
244+
tags: [
245+
{
246+
name: "userTicket",
247+
value: userTicket.id,
248+
},
249+
{
250+
name: "ticketId",
251+
value: userTicket.ticketTemplate.id,
252+
},
253+
{
254+
name: "eventId",
255+
value: userTicket.ticketTemplate.event.id,
256+
},
257+
{
258+
name: "userId",
259+
value: userTicket.user.id,
260+
},
261+
],
262+
});
228263
});
229-
});
230264

231-
await RPC_SERVICE_EMAIL.bulkSendUserQRTicketEmail({
232-
to,
233-
ticketName: userTickets[0].ticketTemplate.name,
234-
});
265+
await RPC_SERVICE_EMAIL.bulkSendUserQRTicketEmail({
266+
to,
267+
ticketName: ticketTemplate.name,
268+
});
269+
}
235270

236271
const emailLogsValuesToInsert = userTickets.map((someUserTicket) => {
237272
const next = insertUserTicketsEmailLogSchema.parse({

0 commit comments

Comments
 (0)