@coursebuilder/adapter-drizzle
Version:
Drizzle adapter for Course Builder.
78 lines (74 loc) • 2.24 kB
text/typescript
import { relations, sql } from 'drizzle-orm'
import {
index,
mysqlEnum,
MySqlTableFn,
primaryKey,
timestamp,
varchar,
} from 'drizzle-orm/mysql-core'
import { getUsersSchema } from '../auth/users.js'
import { getPurchaseSchema } from './purchase.js'
export function getPurchaseUserTransferSchema(mysqlTable: MySqlTableFn) {
return mysqlTable(
'PurchaseUserTransfer',
{
id: varchar('id', { length: 191 }).notNull(),
transferState: mysqlEnum('transferState', [
'AVAILABLE',
'INITIATED',
'VERIFIED',
'CANCELED',
'EXPIRED',
'CONFIRMED',
'COMPLETED',
])
.default('AVAILABLE')
.notNull(),
purchaseId: varchar('purchaseId', { length: 191 }).notNull(),
organizationId: varchar('organizationId', { length: 191 }),
sourceUserId: varchar('sourceUserId', { length: 191 }).notNull(),
targetUserId: varchar('targetUserId', { length: 191 }),
createdAt: timestamp('createdAt', { mode: 'date', fsp: 3 })
.default(sql`CURRENT_TIMESTAMP(3)`)
.notNull(),
expiresAt: timestamp('expiresAt', { mode: 'date', fsp: 3 }),
canceledAt: timestamp('canceledAt', { mode: 'date', fsp: 3 }),
confirmedAt: timestamp('confirmedAt', { mode: 'date', fsp: 3 }),
completedAt: timestamp('completedAt', { mode: 'date', fsp: 3 }),
},
(table) => {
return {
purchaseUserTransferId: primaryKey({
columns: [table.id],
name: 'PurchaseUserTransfer_id',
}),
organizationIdIdx: index('organizationId_idx').on(table.organizationId),
}
},
)
}
export function getPurchaseUserTransferRelationsSchema(
mysqlTable: MySqlTableFn,
) {
const purchaseUserTransfer = getPurchaseUserTransferSchema(mysqlTable)
const user = getUsersSchema(mysqlTable)
const purchase = getPurchaseSchema(mysqlTable)
return relations(purchaseUserTransfer, ({ one }) => ({
sourceUser: one(user, {
fields: [purchaseUserTransfer.sourceUserId],
references: [user.id],
relationName: 'sourceUser',
}),
targetUser: one(user, {
fields: [purchaseUserTransfer.targetUserId],
references: [user.id],
relationName: 'targetUser',
}),
purchase: one(purchase, {
fields: [purchaseUserTransfer.purchaseId],
references: [purchase.id],
relationName: 'purchase',
}),
}))
}