diff --git a/packages/api/src/routers/forms.ts b/packages/api/src/routers/forms.ts index 385546c2..092dcb9b 100644 --- a/packages/api/src/routers/forms.ts +++ b/packages/api/src/routers/forms.ts @@ -24,6 +24,20 @@ import { minioClient } from "../minio/minio-client"; import { adminProcedure, protectedProcedure, publicProcedure } from "../trpc"; import { generateJsonSchema, regenerateMediaUrls } from "../utils"; +// eslint-disable-next-line @typescript-eslint/no-explicit-any +type FormResponseCallBack = (userId: string, response: any) => undefined; + +/** + Example form call back handler, please reference :pray: + *const handle_sample_form_response = ((userId: string, response: { answer: string }) => { + * console.log(userId, response); + *}) satisfies FormResponseCallBack; +*/ + +const handleCallbacks: Record = { + //"sample-form": handle_sample_form_response, +}; + export const formsRouter = { createForm: adminProcedure .input( @@ -258,6 +272,18 @@ export const formsRouter = { }); } + const handler = handleCallbacks[form.slugName]; + if (handler) { + try { + handler(userId, input.responseData); + } catch { + throw new TRPCError({ + message: "Form response failed form validation", + code: "BAD_REQUEST", + }); + } + } + await db.insert(FormResponse).values({ userId, ...input,