diff --git a/apps/web/utils/actions/onboarding.ts b/apps/web/utils/actions/onboarding.ts index 6cd7aa7cbb..2b8fda7d3b 100644 --- a/apps/web/utils/actions/onboarding.ts +++ b/apps/web/utils/actions/onboarding.ts @@ -6,6 +6,7 @@ import { } from "@/utils/actions/onboarding.validation"; import { actionClientUser } from "@/utils/actions/safe-action"; import prisma from "@/utils/prisma"; +import { updateContactCompanySize } from "@inboxzero/loops"; export const completedOnboardingAction = actionClientUser .metadata({ name: "completedOnboarding" }) @@ -22,7 +23,7 @@ export const saveOnboardingAnswersAction = actionClientUser .action( async ({ parsedInput: { surveyId, questions, answers }, - ctx: { userId }, + ctx: { userId, logger }, }) => { // Helper function to extract survey answers from the response format function extractSurveyAnswers(questions: any[], answers: any) { @@ -105,10 +106,9 @@ export const saveOnboardingAnswersAction = actionClientUser return result; } - // Extract individual survey answers for easier querying const extractedAnswers = extractSurveyAnswers(questions, answers); - await prisma.user.update({ + const userPromise = prisma.user.update({ where: { id: userId }, data: { onboardingAnswers: { surveyId, questions, answers }, @@ -120,6 +120,20 @@ export const saveOnboardingAnswersAction = actionClientUser surveyImprovements: extractedAnswers.surveyImprovements, }, }); + + await Promise.all([ + userPromise, + async () => { + if (extractedAnswers.surveyCompanySize) { + updateContactCompanySize( + userId, + extractedAnswers.surveyCompanySize, + ).catch((error) => { + logger.error("Error updating company size", { error }); + }); + } + }, + ]); }, ); diff --git a/packages/loops/src/loops.ts b/packages/loops/src/loops.ts index 86f4b3760e..1882f859ba 100644 --- a/packages/loops/src/loops.ts +++ b/packages/loops/src/loops.ts @@ -98,6 +98,27 @@ export async function cancelledPremium( return resp; } +async function updateContactProperty( + email: string, + properties: Record, +): Promise<{ success: boolean }> { + const loops = getLoopsClient(); + if (!loops) return { success: false }; + + const resp = await loops.updateContact({ + email, + properties, + }); + return resp; +} + +export async function updateContactCompanySize( + email: string, + companySize: number, +) { + return updateContactProperty(email, { companySize }); +} + function getRandomInt(max: number) { return Math.ceil(Math.random() * max); } diff --git a/version.txt b/version.txt index b5596b5ebb..34fe289817 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -v2.9.42 +v2.9.43