UNPKG

@coursebuilder/adapter-drizzle

Version:

Drizzle adapter for Course Builder.

61 lines (57 loc) 1.85 kB
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', }), })) }