Last active
May 6, 2022 02:29
-
-
Save HectorBlisS/ce52e582cb88725d47ec39ab9ca781bd to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import { json, LoaderFunction } from "remix"; | |
import Stripe from 'stripe' | |
import dbConnection from "~/db/mongoose.server"; | |
const stripe = new Stripe(process.env.STRIPE_SECRET_KEY) | |
export async function action({ request }): LoaderFunction { | |
if (request.method !== 'POST') return; | |
const webhookSecret = process.env.STRIPE_SIGN; | |
const webhookStripeSignatureHeader = request.headers.get('stripe-signature'); | |
const payload = await request.text() | |
let event | |
let paymentIntent | |
try { | |
event = stripe.webhooks.constructEvent( | |
payload, | |
webhookStripeSignatureHeader, | |
webhookSecret, | |
); | |
} catch (err) { | |
console.error(`Webhook Error: ${err.message}`); | |
return null; | |
} | |
switch (event.type) { | |
//TODO: On failed we want to know who to email marketing | |
case 'checkout.session.async_payment_failed': | |
return null; | |
//TODO: need a difference for module vs course | |
case 'checkout.session.async_payment_succeeded': | |
case 'checkout.session.completed': | |
session = event.data.object; | |
const db = await dbConnection() | |
const user = await db.User.findOne({ email: session.customer_email }) | |
const offer = await db.Offer.findOne({ slug: session.metadata.offerSlug }) | |
const order = await db.Order.create({ | |
user: user._id, | |
amount: session.amount_total, | |
currency: session.currency, | |
stripeCustomer: session.customer, | |
paid: session.payment_status, | |
metadata: session.metadata, | |
}); | |
//TODO: need a difference for module vs course USE METADATA | |
await db.User.findByIdAndUpdate(user._id, { | |
$addToSet: { | |
courses: offer.course, | |
} | |
}, { new: true }) | |
return json(null, { status: 200 }); | |
default: | |
return null; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment