mirror of
https://github.com/jcreek/SvelteKitSaasBoilerplate.git
synced 2026-07-13 11:03:49 +00:00
feat(#29): Add ability to record that a user has purchased a product - part 1
This commit is contained in:
@@ -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);
|
||||
};
|
||||
|
||||
@@ -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 });
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user