feat(#29): Add ability to record that a user has purchased a product - part 1

This commit is contained in:
Josh Creek
2024-09-21 19:55:10 +01:00
parent b159c33487
commit d4f7f5041d
3 changed files with 26 additions and 9 deletions
+17 -5
View File
@@ -2,7 +2,16 @@ import { type RequestHandler, redirect } from '@sveltejs/kit';
import { stripe as stripeClient } from '$lib/utils/stripe';
// Create a checkout session
export const POST: RequestHandler = async ({ request, cookies }) => {
export const POST: RequestHandler = async ({ request, cookies, locals: { safeGetSession } }) => {
const { session } = await safeGetSession();
if (!session) {
// If no session is found, the user isn't authenticated, so block the action
return new Response('Unauthorized', { status: 401 });
}
const userId = session.user.id;
const formData = new URLSearchParams(await request.text());
const items: { priceId: string; quantity: number }[] = [];
@@ -16,14 +25,17 @@ export const POST: RequestHandler = async ({ request, cookies }) => {
quantity: item.quantity
}));
const session = await stripeClient.checkout.sessions.create({
const checkoutSession = await stripeClient.checkout.sessions.create({
line_items: lineItems,
mode: 'payment',
success_url: `${request.headers.get('origin')}/checkout/success`,
cancel_url: `${request.headers.get('origin')}/checkout/cancelled`
cancel_url: `${request.headers.get('origin')}/checkout/cancelled`,
metadata: {
userId: userId
}
});
// Store the checkout session.id for access from the frontend
cookies.set('checkout_session_id', session.id, { path: '/' });
return redirect(303, session.url as string);
cookies.set('checkout_session_id', checkoutSession.id, { path: '/' });
return redirect(303, checkoutSession.url as string);
};
+7 -4
View File
@@ -1,4 +1,4 @@
import type { RequestHandler } from '@sveltejs/kit';
import { json, type RequestHandler } from '@sveltejs/kit';
import stripe from 'stripe';
import { STRIPE_ENDPOINT_SECRET } from '$env/static/private';
import {
@@ -71,16 +71,19 @@ export const POST: RequestHandler = async ({ request }) => {
checkoutSession.customer as string,
true
);
} else if (checkoutSession.mode === 'payment') {
// TODO Record that they purchased the product
console.log(checkoutSession);
}
break;
}
default:
console.log(`Unhandled event type ${event.type}`)
console.log(`Unhandled event type ${event.type}`);
}
} catch (err) {
const message = err instanceof Error ? err.message : 'An unknown error has occurred';
return new Response(`Webhook Error: ${message}`, { status: 500 });
}
return json({received: true})
}
return json({ received: true });
};