Skip to content

Commit 63071f9

Browse files
authored
Update user bulk creation (#259)
1 parent b3cb083 commit 63071f9

1 file changed

Lines changed: 84 additions & 13 deletions

File tree

src/schema/user/mutations.ts

Lines changed: 84 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,7 @@ import {
1515
usersToCommunitiesSchema,
1616
} from "~/datasources/db/schema";
1717
import { applicationError, ServiceErrors } from "~/errors";
18-
import {
19-
sendActualUserTicketQREmails,
20-
sendTicketInvitationEmails,
21-
} from "~/notifications/tickets";
18+
import { sendActualUserTicketQREmails } from "~/notifications/tickets";
2219
import { UserRef } from "~/schema/shared/refs";
2320
import { pronounsEnum } from "~/schema/user/types";
2421
import { usersFetcher } from "~/schema/user/userFetcher";
@@ -276,6 +273,13 @@ const placeHolderUsersInput = builder.inputType("placeHolderUsersInput", {
276273
fields: (t) => ({
277274
email: t.string({ required: true }),
278275
name: t.string({ required: true }),
276+
pais: t.string(),
277+
ciudad: t.string(),
278+
trabajasEnOrganizacion: t.string(),
279+
nombreOrganizacion: t.string(),
280+
rolEnOrganizacion: t.string(),
281+
foodAllergies: t.string(),
282+
emergencyPhoneNumber: t.string(),
279283
}),
280284
});
281285

@@ -306,15 +310,56 @@ builder.mutationField("createPlaceholderdUsers", (t) =>
306310
throw new Error("User not found");
307311
}
308312

309-
const cleanedUsers = users.map((u) =>
310-
insertUsersSchema.parse({
311-
name: u.name.trim(),
312-
email: u.email.trim().toLowerCase(),
313-
username: `${slugify(u.name, { lower: true })}${Math.floor(
314-
Math.random() * 10,
315-
)}`,
316-
}),
317-
);
313+
const usersMap = new Map<
314+
string,
315+
{
316+
id: string | undefined;
317+
name: string;
318+
email: string;
319+
pais: string | undefined;
320+
ciudad: string | undefined;
321+
username: string;
322+
trabajasEnOrganizacion: boolean;
323+
nombreOrganizacion: string | undefined;
324+
rolEnOrganizacion: string | undefined;
325+
foodAllergies: string | undefined;
326+
emergencyPhoneNumber: string | undefined;
327+
}
328+
>();
329+
330+
const cleanedUsers = users.map((u) => {
331+
const lowerCaseEmail = u.email.trim().toLowerCase();
332+
333+
const name = u.name.trim();
334+
const email = u.email.trim().toLowerCase();
335+
const username = `${slugify(name, { lower: true })}${Math.floor(
336+
Math.random() * 100,
337+
)}`;
338+
const trabajasEnOrganizacion =
339+
u.trabajasEnOrganizacion?.toLowerCase() === 'sí"';
340+
341+
if (!usersMap.has(lowerCaseEmail)) {
342+
usersMap.set(lowerCaseEmail, {
343+
id: undefined,
344+
name,
345+
email,
346+
username,
347+
pais: u.pais ?? undefined,
348+
ciudad: u.ciudad ?? undefined,
349+
trabajasEnOrganizacion,
350+
nombreOrganizacion: u.nombreOrganizacion ?? undefined,
351+
rolEnOrganizacion: u.rolEnOrganizacion ?? undefined,
352+
foodAllergies: u.foodAllergies ?? undefined,
353+
emergencyPhoneNumber: u.emergencyPhoneNumber ?? undefined,
354+
});
355+
}
356+
357+
return insertUsersSchema.parse({
358+
name,
359+
email,
360+
username,
361+
});
362+
});
318363

319364
const createdUsers = await DB.insert(usersSchema)
320365
.values(cleanedUsers)
@@ -324,6 +369,32 @@ builder.mutationField("createPlaceholderdUsers", (t) =>
324369
const emails = cleanedUsers.map((u) => u.email);
325370
const ids = createdUsers.map((u) => u.id);
326371

372+
const insertUserData = createdUsers
373+
.map((u) => {
374+
const user = usersMap.get(u.email);
375+
376+
if (!user) {
377+
return null;
378+
}
379+
380+
return insertUserDataSchema.parse({
381+
userId: u.id,
382+
countryOfResidence: user.pais ?? "",
383+
city: user.ciudad ?? "",
384+
worksInOrganization: user.trabajasEnOrganizacion,
385+
organizationName: user.nombreOrganizacion ?? "",
386+
roleInOrganization: user.rolEnOrganizacion ?? "",
387+
foodAllergies: user.foodAllergies ?? "",
388+
emergencyPhoneNumber: user.emergencyPhoneNumber ?? "",
389+
});
390+
})
391+
.filter(Boolean);
392+
393+
await DB.insert(userDataSchema)
394+
.values(insertUserData)
395+
.onConflictDoNothing()
396+
.returning();
397+
327398
const foundUsers = await DB.query.usersSchema.findMany({
328399
where: (u, { inArray, or }) =>
329400
or(inArray(u.email, emails), inArray(u.id, ids)),

0 commit comments

Comments
 (0)