feat: Add cancellation effective date to subscriptions

This commit is contained in:
Faruk AYDIN
2023-04-11 22:45:12 +02:00
parent 4e182b49f9
commit 596be24d92
3 changed files with 37 additions and 11 deletions

View File

@@ -0,0 +1,18 @@
import { Knex } from 'knex';
import appConfig from '../../config/app';
export async function up(knex: Knex): Promise<void> {
if (!appConfig.isCloud) return;
return knex.schema.table('subscriptions', (table) => {
table.date('cancellation_effective_date');
});
}
export async function down(knex: Knex): Promise<void> {
if (!appConfig.isCloud) return;
return knex.schema.table('subscriptions', (table) => {
table.dropColumn('cancellation_effective_date');
});
}

View File

@@ -3,13 +3,16 @@ import Subscription from '../../models/subscription.ee';
import Billing from './index.ee';
const handleSubscriptionCreated = async (request: IRequest) => {
const subscription = await Subscription.query().insertAndFetch(formatSubscription(request));
await subscription.$relatedQuery('usageData').insert(formatUsageData(request));
const subscription = await Subscription.query().insertAndFetch(
formatSubscription(request)
);
await subscription
.$relatedQuery('usageData')
.insert(formatUsageData(request));
};
const handleSubscriptionUpdated = async (request: IRequest) => {
await Subscription
.query()
await Subscription.query()
.findOne({
paddle_subscription_id: request.body.subscription_id,
})
@@ -17,15 +20,15 @@ const handleSubscriptionUpdated = async (request: IRequest) => {
};
const handleSubscriptionCancelled = async (request: IRequest) => {
const subscription = await Subscription
.query()
.findOne({
paddle_subscription_id: request.body.subscription_id,
});
const subscription = await Subscription.query().findOne({
paddle_subscription_id: request.body.subscription_id,
});
await subscription.$query().patchAndFetch(formatSubscription(request));
await subscription.$query().delete();
// Have a background job that deletes the subscription in cancellation effective date
// Architect in a way that it will behave as cron.
// await subscription.$query().delete();
};
const handleSubscriptionPaymentSucceeded = async (request: IRequest) => {
@@ -45,7 +48,9 @@ const handleSubscriptionPaymentSucceeded = async (request: IRequest) => {
lastBillDate: remoteSubscription.last_payment.date,
});
await subscription.$relatedQuery('usageData').insert(formatUsageData(request));
await subscription
.$relatedQuery('usageData')
.insert(formatUsageData(request));
};
const formatSubscription = (request: IRequest) => {
@@ -58,6 +63,7 @@ const formatSubscription = (request: IRequest) => {
status: request.body.status,
nextBillDate: request.body.next_bill_date,
nextBillAmount: request.body.unit_price,
cancellationEffectiveDate: request.body.cancellation_effective_date,
};
};

View File

@@ -14,6 +14,7 @@ class Subscription extends Base {
nextBillAmount!: string;
nextBillDate!: string;
lastBillDate?: string;
cancellationEffectiveDate?: string;
usageData?: UsageData[];
currentUsageData?: UsageData;
@@ -43,6 +44,7 @@ class Subscription extends Base {
nextBillAmount: { type: 'string' },
nextBillDate: { type: 'string' },
lastBillDate: { type: 'string' },
cancellationEffectiveDate: { type: 'string' },
},
};