feat: Create subscription model

This commit is contained in:
Faruk AYDIN
2023-03-23 18:15:36 +03:00
parent 71a7943d01
commit b17e431473
2 changed files with 84 additions and 0 deletions

View File

@@ -0,0 +1,27 @@
import { Knex } from 'knex';
import appConfig from '../../config/app';
export async function up(knex: Knex): Promise<void> {
if (!appConfig.isCloud) return;
return knex.schema.createTable('subscriptions', (table) => {
table.uuid('id').primary().defaultTo(knex.raw('gen_random_uuid()'));
table.uuid('user_id').references('id').inTable('users');
table.string('paddle_subscription_id').unique().notNullable();
table.string('paddle_plan_id').notNullable();
table.string('update_url').notNullable();
table.string('cancel_url').notNullable();
table.string('status').notNullable();
table.string('next_bill_amount').notNullable();
table.date('next_bill_date').notNullable();
table.date('last_bill_date');
table.timestamps(true, true);
});
}
export async function down(knex: Knex): Promise<void> {
if (!appConfig.isCloud) return;
return knex.schema.dropTable('subscriptions');
}

View File

@@ -0,0 +1,57 @@
import Base from './base';
import User from './user';
class Subscription extends Base {
id!: string;
userId!: string;
paddleSubscriptionId!: string;
paddlePlanId!: string;
updateUrl!: string;
cancelUrl!: string;
status!: string;
nextBillAmount!: string;
nextBillDate!: string;
lastBillDate?: string;
static tableName = 'subscriptions';
static jsonSchema = {
type: 'object',
required: [
'userId',
'paddleSubscriptionId',
'paddlePlanId',
'updateUrl',
'cancelUrl',
'status',
'nextBillAmount',
'nextBillDate',
],
properties: {
id: { type: 'string', format: 'uuid' },
userId: { type: 'string', format: 'uuid' },
paddleSubscriptionId: { type: 'string' },
paddlePlanId: { type: 'string' },
updateUrl: { type: 'string' },
cancelUrl: { type: 'string' },
status: { type: 'string' },
nextBillAmount: { type: 'string' },
nextBillDate: { type: 'string' },
lastBillDate: { type: 'string' },
},
};
static relationMappings = () => ({
user: {
relation: Base.BelongsToOneRelation,
modelClass: User,
join: {
from: 'usage_data.user_id',
to: 'users.id',
},
},
});
}
export default Subscription;