@coursebuilder/adapter-drizzle
Version:
Drizzle adapter for Course Builder.
65 lines (61 loc) • 1.88 kB
text/typescript
import { relations, sql } from 'drizzle-orm'
import {
index,
int,
MySqlTableFn,
primaryKey,
timestamp,
varchar,
} from 'drizzle-orm/mysql-core'
import { getMerchantChargeSchema } from './merchant-charge.js'
import { getSubscriptionSchema } from './subscription.js'
export function getMerchantSubscriptionSchema(mysqlTable: MySqlTableFn) {
return mysqlTable(
'MerchantSubscription',
{
id: varchar('id', { length: 191 }).notNull(),
organizationId: varchar('organizationId', { length: 191 }),
merchantAccountId: varchar('merchantAccountId', {
length: 191,
}).notNull(),
status: int('status').default(0).notNull(),
createdAt: timestamp('createdAt', { mode: 'date', fsp: 3 })
.default(sql`CURRENT_TIMESTAMP(3)`)
.notNull(),
label: varchar('label', { length: 191 }),
identifier: varchar('identifier', { length: 191 }),
merchantCustomerId: varchar('merchantCustomerId', {
length: 191,
}).notNull(),
merchantProductId: varchar('merchantProductId', {
length: 191,
}).notNull(),
},
(table) => {
return {
merchantSubscriptionId: primaryKey({
columns: [table.id],
name: 'MerchantSubscription_id',
}),
organizationIdIdx: index('organizationId_idx').on(table.organizationId),
}
},
)
}
export function getMerchantSubscriptionRelationsSchema(
mysqlTable: MySqlTableFn,
) {
const merchantSubscription = getMerchantSubscriptionSchema(mysqlTable)
const merchantCharge = getMerchantChargeSchema(mysqlTable)
const subscription = getSubscriptionSchema(mysqlTable)
return relations(merchantSubscription, ({ many, one }) => ({
merchantCharges: many(merchantCharge, {
relationName: 'merchantSubscription',
}),
subscription: one(subscription, {
fields: [merchantSubscription.id],
references: [subscription.merchantSubscriptionId],
relationName: 'subscription',
}),
}))
}