@coursebuilder/adapter-drizzle
Version:
Drizzle adapter for Course Builder.
61 lines (57 loc) • 1.85 kB
text/typescript
import { relations, sql } from 'drizzle-orm'
import {
double,
index,
json,
MySqlTableFn,
primaryKey,
timestamp,
varchar,
} from 'drizzle-orm/mysql-core'
import { getProductSchema } from './product.js'
export function getUpgradableProductsSchema(mysqlTable: MySqlTableFn) {
return mysqlTable(
'UpgradableProducts',
{
upgradableToId: varchar('upgradableToId', { length: 255 }).notNull(),
upgradableFromId: varchar('upgradableFrom', { length: 255 }).notNull(),
organizationId: varchar('organizationId', { length: 191 }),
position: double('position').notNull().default(0),
metadata: json('metadata').$type<Record<string, any>>().default({}),
createdAt: timestamp('createdAt', {
mode: 'date',
fsp: 3,
}).default(sql`CURRENT_TIMESTAMP(3)`),
updatedAt: timestamp('updatedAt', {
mode: 'date',
fsp: 3,
}).default(sql`CURRENT_TIMESTAMP(3)`),
deletedAt: timestamp('deletedAt', {
mode: 'date',
fsp: 3,
}),
},
(crr) => ({
pk: primaryKey({ columns: [crr.upgradableToId, crr.upgradableFromId] }),
upgradableToIdIdx: index('upgradableFromId_idx').on(crr.upgradableToId),
upgradableFromIdIdx: index('upgradableToId_idx').on(crr.upgradableFromId),
organizationIdIdx: index('organizationId_idx').on(crr.organizationId),
}),
)
}
export function getUpgradableProductsRelationsSchema(mysqlTable: MySqlTableFn) {
const product = getProductSchema(mysqlTable)
const upgradableProduct = getUpgradableProductsSchema(mysqlTable)
return relations(upgradableProduct, ({ one }) => ({
upgradableTo: one(product, {
fields: [upgradableProduct.upgradableToId],
references: [product.id],
relationName: 'upgradableTo',
}),
upgradableFrom: one(product, {
fields: [upgradableProduct.upgradableFromId],
references: [product.id],
relationName: 'upgradableFrom',
}),
}))
}