diff --git a/app/(auth)/cloud/payment/success/page.tsx b/app/(auth)/cloud/payment/success/page.tsx index bcf102c..02f87e0 100644 --- a/app/(auth)/cloud/payment/success/page.tsx +++ b/app/(auth)/cloud/payment/success/page.tsx @@ -41,10 +41,6 @@ export default async function CloudPaymentSuccessPage({ aiBalance: plan?.limits.ai, }) - if (await isDatabaseEmpty(user.id)) { - await createUserDefaults(user.id) - } - return ( diff --git a/app/api/stripe/webhook/route.ts b/app/api/stripe/webhook/route.ts index 5632b7c..994b0fa 100644 --- a/app/api/stripe/webhook/route.ts +++ b/app/api/stripe/webhook/route.ts @@ -86,16 +86,12 @@ async function handleUserSubscriptionUpdate( if (!user) { const customer = (await stripeClient.customers.retrieve(customerId)) as Stripe.Customer console.log(`User not found for customer ${customerId}, creating new user with email ${customer.email}`) - + user = await getOrCreateCloudUser(customer.email as string, { email: customer.email as string, name: customer.name as string, stripeCustomerId: customer.id, }) - - if (await isDatabaseEmpty(user.id)) { - await createUserDefaults(user.id) - } } const newMembershipExpiresAt = new Date(item.current_period_end * 1000) diff --git a/models/users.ts b/models/users.ts index ee21069..12fce6c 100644 --- a/models/users.ts +++ b/models/users.ts @@ -1,6 +1,8 @@ import { prisma } from "@/lib/db" import { Prisma } from "@/prisma/client" import { cache } from "react" +import { isDatabaseEmpty } from "./defaults" +import { createUserDefaults } from "./defaults" export const SELF_HOSTED_USER = { email: "taxhacker@localhost", @@ -26,12 +28,18 @@ export const getOrCreateSelfHostedUser = cache(async () => { }) }) -export function getOrCreateCloudUser(email: string, data: Prisma.UserCreateInput) { - return prisma.user.upsert({ +export async function getOrCreateCloudUser(email: string, data: Prisma.UserCreateInput) { + const user = await prisma.user.upsert({ where: { email: email.toLowerCase() }, update: data, create: data, }) + + if (await isDatabaseEmpty(user.id)) { + await createUserDefaults(user.id) + } + + return user } export const getUserById = cache(async (id: string) => {