Nishil FalduN
Convex Community2y ago
3 replies
Nishil Faldu

Action, Internal, Query and Mutation

export const storeStripeCustomerId = action({
  args: {},
  handler: async ctx => {
    const stripe = new Stripe(
      process.env.STRIPE_SECRET_KEY! ?? "",
      {
        apiVersion: "2023-10-16",
        typescript: true,
      }
    );

    const user = await ctx.runQuery(internal.users.getUserInternalQuery);
    if (!user) {
      throw new Error("User not found");
    }
    console.log("bla bla bla run now");
    console.log(user, "user");

    if(!user.stripeId) {
      const customer = await stripe.customers.create({
        email: user.email,
        name: user.firstName + " " + user.lastName,
      });

      console.log("let me create one");

      //   await ctx.db.patch(user._id, {
      //     stripeId: customer.id,
      //   });
      const stripeId : string
       = await ctx.runMutation(internal.users.storeStripeId, { userId: user._id, stripeId: customer.id });

      return stripeId;
    }

    return user.stripeId;
  },
});


the hook (for some reason), given below runs twice and in the process it generates 2 stripe customers which should ideally be impossible considering I check for if(!user.stripeId) this which surprisingly is true both the times which means stripeId is "". Surprisingly when I check the logs on convex dashboard, the log statement runMutation prints first and before the log statement of storeStripeCustomerId. Would really appreciate someone's help here as I am very confused!
Was this page helpful?