feat: add subscription update and cancel logics
This commit is contained in:
@@ -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,
|
||||
|
@@ -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;
|
||||
|
@@ -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,
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user