29 lines
1.1 KiB
TypeScript
29 lines
1.1 KiB
TypeScript
import { createServerFn } from "@tanstack/react-start";
|
|
import { z } from "zod";
|
|
import { captureRedditConversion } from "@/server/lib/reddit-conversions";
|
|
import { redditAttributionSchema } from "@/shared/reddit-attribution";
|
|
import { requireAuthenticatedContext } from "@/serverFunctions/middleware";
|
|
|
|
const conversionInputSchema = z.object({
|
|
attribution: redditAttributionSchema,
|
|
eventType: z.enum(["SignUp", "Purchase"]),
|
|
});
|
|
|
|
export const captureRedditConversionEvent = createServerFn({ method: "POST" })
|
|
.middleware(requireAuthenticatedContext)
|
|
.inputValidator((data: unknown) => conversionInputSchema.parse(data))
|
|
.handler(async ({ data, context }) => {
|
|
const status = await captureRedditConversion({
|
|
attribution: data.attribution,
|
|
conversionId: `${data.eventType.toLowerCase()}:${context.userId}`,
|
|
email: context.userEmail,
|
|
eventType: data.eventType,
|
|
organizationId: context.organizationId,
|
|
userId: context.userId,
|
|
valueDecimal: data.eventType === "Purchase" ? 10 : undefined,
|
|
currency: data.eventType === "Purchase" ? "USD" : undefined,
|
|
});
|
|
|
|
return { status };
|
|
});
|