From 99454fdc4b6617ede8342c78fc9a12086f9b9193 Mon Sep 17 00:00:00 2001 From: Faruk AYDIN Date: Fri, 24 Mar 2023 13:48:15 +0300 Subject: [PATCH] feat: Handle subscription created webhook event --- .../src/controllers/paddle/webhooks.ee.ts | 5 +++- .../backend/src/helpers/billing/index.ee.ts | 2 ++ .../src/helpers/billing/webhooks.ee.ts | 25 +++++++++++++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 packages/backend/src/helpers/billing/webhooks.ee.ts diff --git a/packages/backend/src/controllers/paddle/webhooks.ee.ts b/packages/backend/src/controllers/paddle/webhooks.ee.ts index 7786c59c..eeb83e5a 100644 --- a/packages/backend/src/controllers/paddle/webhooks.ee.ts +++ b/packages/backend/src/controllers/paddle/webhooks.ee.ts @@ -9,6 +9,9 @@ export default async (request: IRequest, response: Response) => { return response.sendStatus(401); } - // TODO: Handle Paddle webhooks + if (request.body.alert_name === 'subscription_created') { + await Billing.webhooks.handleSubscriptionCreated(request); + } + return response.sendStatus(200); }; diff --git a/packages/backend/src/helpers/billing/index.ee.ts b/packages/backend/src/helpers/billing/index.ee.ts index ef882dde..525dc772 100644 --- a/packages/backend/src/helpers/billing/index.ee.ts +++ b/packages/backend/src/helpers/billing/index.ee.ts @@ -1,6 +1,7 @@ import appConfig from '../../config/app'; import paddleClient from './paddle.ee'; import paddlePlans from './plans.ee'; +import webhooks from './webhooks.ee'; const paddleInfo = { sandbox: appConfig.isDev ? true : false, @@ -11,6 +12,7 @@ const billing = { paddleClient, paddlePlans, paddleInfo, + webhooks, }; export default billing; diff --git a/packages/backend/src/helpers/billing/webhooks.ee.ts b/packages/backend/src/helpers/billing/webhooks.ee.ts new file mode 100644 index 00000000..4d75b81e --- /dev/null +++ b/packages/backend/src/helpers/billing/webhooks.ee.ts @@ -0,0 +1,25 @@ +import { IRequest } from '@automatisch/types'; +import Subscription from '../../models/subscription.ee'; + +const handleSubscriptionCreated = async (request: IRequest) => { + await Subscription.query().insertAndFetch(formatSubscription(request)); +}; + +const formatSubscription = (request: IRequest) => { + return { + userId: JSON.parse(request.body.passthrough).id, + paddleSubscriptionId: request.body.subscription_id, + paddlePlanId: request.body.subscription_plan_id, + cancelUrl: request.body.cancel_url, + updateUrl: request.body.update_url, + status: request.body.status, + nextBillDate: request.body.next_bill_date, + nextBillAmount: request.body.next_bill_amount, + }; +}; + +const webhooks = { + handleSubscriptionCreated, +}; + +export default webhooks;