From be0a5c08bf9d1059330ba4f3309b3689ce2fbb8f Mon Sep 17 00:00:00 2001 From: pax2678 Date: Thu, 10 Jul 2025 14:30:25 -0700 Subject: [PATCH 1/2] Update the polarPriceId in Subscription table when subscription is updated in Polar. Select the latest subscription when querying subscription based on userId. --- convex/subscriptions.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/convex/subscriptions.ts b/convex/subscriptions.ts index 41b2d2c..cac4b3e 100644 --- a/convex/subscriptions.ts +++ b/convex/subscriptions.ts @@ -185,7 +185,7 @@ export const checkUserSubscriptionStatus = query({ } tokenIdentifier = identity.subject; } - + const user = await ctx.db .query("users") .withIndex("by_token", (q) => q.eq("tokenIdentifier", tokenIdentifier)) @@ -194,10 +194,11 @@ export const checkUserSubscriptionStatus = query({ if (!user) { return { hasActiveSubscription: false }; } - + const subscription = await ctx.db .query("subscriptions") .withIndex("userId", (q) => q.eq("userId", user.tokenIdentifier)) + .order("desc") // Order by createdAt in descending order .first(); const hasActiveSubscription = subscription?.status === "active"; @@ -234,6 +235,7 @@ export const checkUserSubscriptionStatusByClerkId = query({ const subscription = await ctx.db .query("subscriptions") .withIndex("userId", (q) => q.eq("userId", user.tokenIdentifier)) + .order("desc") // Order by createdAt in descending order .first(); const hasActiveSubscription = subscription?.status === "active"; @@ -261,6 +263,7 @@ export const fetchUserSubscription = query({ const subscription = await ctx.db .query("subscriptions") .withIndex("userId", (q) => q.eq("userId", user.tokenIdentifier)) + .order("desc") // Order by createdAt in descending order .first(); return subscription; @@ -328,6 +331,7 @@ export const handleWebhookEvent = mutation({ if (existingSub) { await ctx.db.patch(existingSub._id, { + polarPriceId: args.body.data.price_id, amount: args.body.data.amount, status: args.body.data.status, currentPeriodStart: new Date( From 22ef41e922f072f45252cca0238b4c38bc01a287 Mon Sep 17 00:00:00 2001 From: pax2678 Date: Mon, 18 Aug 2025 20:14:54 -0700 Subject: [PATCH 2/2] fix inconsistent priceId value in metadata stored in Polar and Convex. priceId is not updated after a user changes the subscription creating confusion. Changes Summary: Checkout Creation (lines 52-54): - REMOVED: priceId: productPriceId, from the metadata object - RESULT: Metadata now only contains userId when creating Polar checkouts Impact: - Polar subscriptions: Will only store userId in metadata (no priceId) - Convex subscriptions: Will only store userId in metadata (no priceId) - Price tracking: Still works via the polarPriceId field in the subscription record - User linking: Preserved via userId in metadata for webhook processing --- convex/subscriptions.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/convex/subscriptions.ts b/convex/subscriptions.ts index cac4b3e..7cc7674 100644 --- a/convex/subscriptions.ts +++ b/convex/subscriptions.ts @@ -51,7 +51,6 @@ const createCheckout = async ({ customerEmail: customerEmail, metadata: { ...metadata, - priceId: productPriceId, }, };