UNPKG

@coursebuilder/adapter-drizzle

Version:

Drizzle adapter for Course Builder.

99 lines (95 loc) 3.29 kB
import { relations, sql } from 'drizzle-orm' import { index, json, mysqlEnum, MySqlTableFn, timestamp, varchar, } from 'drizzle-orm/mysql-core' import { getPurchaseSchema } from '../commerce/purchase.js' import { getCommentsSchema } from '../communication/comment.js' import { getCommunicationPreferencesSchema } from '../communication/communication-preferences.js' import { getContentContributionsSchema } from '../content/content-contributions.js' import { getContentResourceSchema } from '../content/content-resource.js' import { getOrganizationMembershipsSchema } from '../org/organization-memberships.js' import { getAccountsSchema } from './accounts.js' import { getProfilesSchema } from './profiles.js' import { getUserPermissionsSchema } from './user-permissions.js' import { getUserPrefsSchema } from './user-prefs.js' import { getUserRolesSchema } from './user-roles.js' export function getUsersSchema(mysqlTable: MySqlTableFn) { return mysqlTable( 'User', { id: varchar('id', { length: 255 }).notNull().primaryKey(), name: varchar('name', { length: 255 }), role: varchar('role', { length: 191 }).notNull().default('user'), email: varchar('email', { length: 255 }).notNull().unique(), fields: json('fields').$type<Record<string, any>>().default({}), emailVerified: timestamp('emailVerified', { mode: 'date', fsp: 3, }), image: varchar('image', { length: 255 }), createdAt: timestamp('createdAt', { mode: 'date', fsp: 3, }).default(sql`CURRENT_TIMESTAMP(3)`), }, (user) => ({ emailIdx: index('email_idx').on(user.email), roleIdx: index('role_idx').on(user.role), createdAtIdx: index('created_at_idx').on(user.createdAt), }), ) } export function getUsersRelationsSchema(mysqlTable: MySqlTableFn) { const users = getUsersSchema(mysqlTable) const profiles = getProfilesSchema(mysqlTable) const accounts = getAccountsSchema(mysqlTable) const communicationPreferences = getCommunicationPreferencesSchema(mysqlTable) const userRoles = getUserRolesSchema(mysqlTable) const userPermissions = getUserPermissionsSchema(mysqlTable) const contentContributions = getContentContributionsSchema(mysqlTable) const contentResource = getContentResourceSchema(mysqlTable) const purchases = getPurchaseSchema(mysqlTable) const comments = getCommentsSchema(mysqlTable) const userPrefs = getUserPrefsSchema(mysqlTable) const organizationMemberships = getOrganizationMembershipsSchema(mysqlTable) return relations(users, ({ many, one }) => ({ profiles: many(profiles, { relationName: 'profiles', }), accounts: many(accounts, { relationName: 'user', }), purchases: many(purchases, { relationName: 'user', }), communicationPreferences: many(communicationPreferences, { relationName: 'user', }), roles: many(userRoles, { relationName: 'user', }), userPermissions: many(userPermissions, { relationName: 'user', }), contributions: many(contentContributions, { relationName: 'user', }), createdContent: many(contentResource, { relationName: 'user', }), comments: many(comments, { relationName: 'user', }), prefs: many(userPrefs, { relationName: 'user', }), organizationMemberships: many(organizationMemberships, { relationName: 'user', }), })) }