feat: add subscription update and cancel logics

This commit is contained in:
Ali BARIN
2023-04-06 13:08:49 +00:00
parent 3e268bf66b
commit 7d47793afb
15 changed files with 170 additions and 54 deletions

View File

@@ -24,6 +24,7 @@ const getSubscription = async (subscriptionId: number) => {
};
const getInvoices = async (subscriptionId: number) => {
// TODO: iterate over previous subscriptions and include their invoices
const data = {
vendor_id: appConfig.paddleVendorId,
vendor_auth_code: appConfig.paddleVendorAuthCode,

View File

@@ -2,15 +2,14 @@ const plans = [
{
name: '10k - monthly',
limit: '10,000',
quota: 10000,
price: '€20',
productId: '47384',
},
{
name: '30k - monthly',
limit: '30,000',
price: '€50',
productId: '47419',
},
}
];
export function getPlanById(id: string) {
return plans.find((plan) => plan.productId === id);
}
export default plans;

View File

@@ -3,7 +3,30 @@ import Subscription from '../../models/subscription.ee';
import Billing from './index.ee';
const handleSubscriptionCreated = async (request: IRequest) => {
await Subscription.query().insertAndFetch(formatSubscription(request));
const subscription = await Subscription.query().insertAndFetch(formatSubscription(request));
await subscription.$relatedQuery('usageData').insert(formatUsageData(request));
};
const handleSubscriptionUpdated = async (request: IRequest) => {
await Subscription
.query()
.findOne({
paddle_subscription_id: request.body.subscription_id,
})
.patch(formatSubscription(request));
};
const handleSubscriptionCancelled = async (request: IRequest) => {
const subscription = await Subscription
.query()
.findOne({
paddle_subscription_id: request.body.subscription_id,
})
.patchAndFetch(formatSubscription(request));
if (request.body.status === 'deleted') {
await subscription.$query().delete();
}
};
const handleSubscriptionPaymentSucceeded = async (request: IRequest) => {
@@ -22,6 +45,8 @@ const handleSubscriptionPaymentSucceeded = async (request: IRequest) => {
nextBillDate: remoteSubscription.next_payment.date,
lastBillDate: remoteSubscription.last_payment.date,
});
await subscription.$relatedQuery('usageData').insert(formatUsageData(request));
};
const formatSubscription = (request: IRequest) => {
@@ -37,8 +62,18 @@ const formatSubscription = (request: IRequest) => {
};
};
const formatUsageData = (request: IRequest) => {
return {
userId: JSON.parse(request.body.passthrough).id,
consumedTaskCount: 0,
nextResetAt: request.body.next_bill_date,
};
};
const webhooks = {
handleSubscriptionCreated,
handleSubscriptionUpdated,
handleSubscriptionCancelled,
handleSubscriptionPaymentSucceeded,
};