feat: Add cancellation effective date to subscriptions
This commit is contained in:
@@ -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');
|
||||||
|
});
|
||||||
|
}
|
@@ -3,13 +3,16 @@ import Subscription from '../../models/subscription.ee';
|
|||||||
import Billing from './index.ee';
|
import Billing from './index.ee';
|
||||||
|
|
||||||
const handleSubscriptionCreated = async (request: IRequest) => {
|
const handleSubscriptionCreated = async (request: IRequest) => {
|
||||||
const subscription = await Subscription.query().insertAndFetch(formatSubscription(request));
|
const subscription = await Subscription.query().insertAndFetch(
|
||||||
await subscription.$relatedQuery('usageData').insert(formatUsageData(request));
|
formatSubscription(request)
|
||||||
|
);
|
||||||
|
await subscription
|
||||||
|
.$relatedQuery('usageData')
|
||||||
|
.insert(formatUsageData(request));
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleSubscriptionUpdated = async (request: IRequest) => {
|
const handleSubscriptionUpdated = async (request: IRequest) => {
|
||||||
await Subscription
|
await Subscription.query()
|
||||||
.query()
|
|
||||||
.findOne({
|
.findOne({
|
||||||
paddle_subscription_id: request.body.subscription_id,
|
paddle_subscription_id: request.body.subscription_id,
|
||||||
})
|
})
|
||||||
@@ -17,15 +20,15 @@ const handleSubscriptionUpdated = async (request: IRequest) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const handleSubscriptionCancelled = async (request: IRequest) => {
|
const handleSubscriptionCancelled = async (request: IRequest) => {
|
||||||
const subscription = await Subscription
|
const subscription = await Subscription.query().findOne({
|
||||||
.query()
|
|
||||||
.findOne({
|
|
||||||
paddle_subscription_id: request.body.subscription_id,
|
paddle_subscription_id: request.body.subscription_id,
|
||||||
});
|
});
|
||||||
|
|
||||||
await subscription.$query().patchAndFetch(formatSubscription(request));
|
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) => {
|
const handleSubscriptionPaymentSucceeded = async (request: IRequest) => {
|
||||||
@@ -45,7 +48,9 @@ const handleSubscriptionPaymentSucceeded = async (request: IRequest) => {
|
|||||||
lastBillDate: remoteSubscription.last_payment.date,
|
lastBillDate: remoteSubscription.last_payment.date,
|
||||||
});
|
});
|
||||||
|
|
||||||
await subscription.$relatedQuery('usageData').insert(formatUsageData(request));
|
await subscription
|
||||||
|
.$relatedQuery('usageData')
|
||||||
|
.insert(formatUsageData(request));
|
||||||
};
|
};
|
||||||
|
|
||||||
const formatSubscription = (request: IRequest) => {
|
const formatSubscription = (request: IRequest) => {
|
||||||
@@ -58,6 +63,7 @@ const formatSubscription = (request: IRequest) => {
|
|||||||
status: request.body.status,
|
status: request.body.status,
|
||||||
nextBillDate: request.body.next_bill_date,
|
nextBillDate: request.body.next_bill_date,
|
||||||
nextBillAmount: request.body.unit_price,
|
nextBillAmount: request.body.unit_price,
|
||||||
|
cancellationEffectiveDate: request.body.cancellation_effective_date,
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -14,6 +14,7 @@ class Subscription extends Base {
|
|||||||
nextBillAmount!: string;
|
nextBillAmount!: string;
|
||||||
nextBillDate!: string;
|
nextBillDate!: string;
|
||||||
lastBillDate?: string;
|
lastBillDate?: string;
|
||||||
|
cancellationEffectiveDate?: string;
|
||||||
usageData?: UsageData[];
|
usageData?: UsageData[];
|
||||||
currentUsageData?: UsageData;
|
currentUsageData?: UsageData;
|
||||||
|
|
||||||
@@ -43,6 +44,7 @@ class Subscription extends Base {
|
|||||||
nextBillAmount: { type: 'string' },
|
nextBillAmount: { type: 'string' },
|
||||||
nextBillDate: { type: 'string' },
|
nextBillDate: { type: 'string' },
|
||||||
lastBillDate: { type: 'string' },
|
lastBillDate: { type: 'string' },
|
||||||
|
cancellationEffectiveDate: { type: 'string' },
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user