diff --git a/apps/web/src/app/api/s/[id]/route.ts b/apps/web/src/app/api/s/[id]/route.ts index d518607..be897bd 100644 --- a/apps/web/src/app/api/s/[id]/route.ts +++ b/apps/web/src/app/api/s/[id]/route.ts @@ -1,4 +1,4 @@ -import { userAgent } from 'next/server'; +import { after, userAgent } from 'next/server'; import { type RouterOutputs } from '@formbase/api'; @@ -142,7 +142,11 @@ export async function POST( }); if (!spamResult.isSpam) { - void handleEmailNotifications(form, cleanedFormData); + after(() => + handleEmailNotifications(form, cleanedFormData).catch((error) => { + console.error('Failed to send submission notification email', error); + }), + ); } const { browser } = userAgent(request); diff --git a/packages/api/routers/formData.ts b/packages/api/routers/formData.ts index e8493b8..1c92da4 100644 --- a/packages/api/routers/formData.ts +++ b/packages/api/routers/formData.ts @@ -120,26 +120,25 @@ export const formDataRouter = createTRPCRouter({ }), ) .mutation(async ({ ctx, input }) => { - return await ctx.db.transaction(async (tx) => { - const formdata = await tx.insert(formDatas).values({ + const [formdata] = await ctx.db.batch([ + ctx.db.insert(formDatas).values({ data: serializeJson(input.data), formId: input.formId, id: generateId(15), createdAt: new Date(), isSpam: input.isSpam, spamReason: input.spamReason ?? null, - }); - - await tx + }), + ctx.db .update(forms) .set({ updatedAt: new Date(), keys: serializeJson(input.keys), }) - .where(eq(forms.id, input.formId)); + .where(eq(forms.id, input.formId)), + ]); - return formdata; - }); + return formdata; }), markAsSpam: protectedProcedure