backend/src/api/stripe/services/stripe.ts (view raw)
1import type { Stripe } from "stripe";
2
3export default () => ({
4 async enableModule(stripeEvent: Stripe.CheckoutSessionCompletedEvent) {
5 const eventUuid = stripeEvent.data.object.client_reference_id;
6 if (!eventUuid) {
7 strapi.log.error(
8 `Can't retrieve event UUID in Stripe webhook. Webhook ID: ${stripeEvent.id}`
9 );
10 return;
11 }
12
13 if (stripeEvent.data.object.payment_status !== "paid") {
14 strapi.log.error(
15 `Can't enable module for event UUID ${eventUuid} as payment status is not 'paid'. Webhook ID: ${stripeEvent.id}`
16 );
17 return;
18 }
19
20 const paymentLink = stripeEvent.data.object.payment_link as string;
21 const moduleProduct = await getModuleProduct(paymentLink);
22 if (!moduleProduct) {
23 strapi.log.error(
24 `Can't retrieve product/module in Stripe webhook. Is module enabled ? Webhook ID: ${stripeEvent.id}`
25 );
26 return;
27 }
28
29 const event = await strapi.db.query("api::event.event").findOne({
30 where: { uuid: eventUuid },
31 });
32 if (!event) {
33 strapi.log.error(
34 `Can't retrieve event with UUID ${eventUuid}. Webhook ID: ${stripeEvent.id}`
35 );
36 return;
37 }
38
39 try {
40 const enabledModules = event.enabled_modules
41 ? [...event.enabled_modules, moduleProduct]
42 : [moduleProduct];
43 await strapi.db.query("api::event.event").update({
44 where: { uuid: eventUuid },
45 data: { enabled_modules: enabledModules },
46 });
47 strapi.log.info(
48 `Module '${moduleProduct}' enabled for event ${eventUuid}`
49 );
50 } catch (error) {
51 strapi.log.error(
52 `Can't enable module ${moduleProduct} for event ${eventUuid}: ${error}`
53 );
54 }
55 },
56});
57
58const getModuleProduct = async (paymentLink: string) => {
59 const modulesConfig = await strapi.entityService.findOne(
60 "api::module.module",
61 1
62 );
63 const modules = [];
64 if (modulesConfig.caroster_plus_enabled) {
65 modules.push([
66 modulesConfig.caroster_plus_payment_link_id,
67 "caroster-plus",
68 ]);
69 }
70 return Object.fromEntries(modules)[paymentLink];
71};