perf: handleChildrenEventType eventtype user connect raw sql (#25650)

* perf: handleChildrenEventType eventtype user connect raw sql

* fixup! perf: handleChildrenEventType eventtype user connect raw sql

* remove user connect with prisma
This commit is contained in:
Morgan
2025-12-08 11:41:25 +02:00
committed by GitHub
parent becae27b45
commit b91f27dc80
@@ -85,6 +85,46 @@ const checkExistentEventTypes = async ({
}
};
function connectUsersToEventTypesQueryWithParams(
eventPairs: {
userId: number | null;
id: number;
}[]
): { sqlQuery: string; parameters: (number | string)[] } {
if (eventPairs.length === 0) {
throw new Error("No event pairs provided for bulk connection.");
}
// Array to hold the SQL placeholders: ($1, $2), ($3, $4), ...
const valuePlaceholders: string[] = [];
// Flat array of all IDs to be inserted as raw SQL parameters
const parameters: (number | string)[] = [];
let paramIndex = 1;
// --- Build the parameterized SQL values ---
for (const pair of eventPairs) {
// Construct the pair of placeholders for the current row
valuePlaceholders.push(`($${paramIndex++}, $${paramIndex++})`);
if (pair.userId != null) {
parameters.push(pair.id);
parameters.push(pair.userId);
}
}
const sqlQuery = `
INSERT INTO "_user_eventtype" ("A", "B")
VALUES
${valuePlaceholders.join(",\n")}
ON CONFLICT DO NOTHING;
`;
// sqlQuery and its parameters for execution
return { sqlQuery, parameters };
}
export default async function handleChildrenEventTypes({
eventTypeId: parentId,
oldEventType,
@@ -214,18 +254,12 @@ export default async function handleChildrenEventTypes({
// Connect users to their event types (many-to-many relation)
// This is needed because createMany doesn't support nested relations
await Promise.all(
createdEvents.map((event) =>
tx.eventType.update({
where: { id: event.id },
data: {
users: {
connect: [{ id: event.userId! }],
},
},
})
)
);
if (createdEvents.length) {
const bulkQueryAndParams = connectUsersToEventTypesQueryWithParams(createdEvents);
if (bulkQueryAndParams) {
await tx.$executeRawUnsafe(bulkQueryAndParams.sqlQuery, ...bulkQueryAndParams.parameters);
}
}
// Link workflows if any exist
if (currentWorkflowIds && currentWorkflowIds.length > 0) {