UNPKG

@coursebuilder/adapter-drizzle

Version:

Drizzle adapter for Course Builder.

76 lines (72 loc) 2.28 kB
import { relations } from 'drizzle-orm' import { boolean, index, MySqlTableFn, primaryKey, timestamp, varchar, } from 'drizzle-orm/mysql-core' import { getRolesSchema } from '../auth/roles.js' import { getOrganizationMembershipsSchema } from './organization-memberships.js' import { getOrganizationsSchema } from './organizations.js' export function getOrganizationMembershipRolesSchema(mysqlTable: MySqlTableFn) { return mysqlTable( 'OrganizationMembershipRole', { organizationMembershipId: varchar('organizationMembershipId', { length: 255, }).notNull(), roleId: varchar('roleId', { length: 255 }).notNull(), active: boolean('active').notNull().default(true), organizationId: varchar('organizationId', { length: 191 }), createdAt: timestamp('createdAt', { mode: 'date', fsp: 3, }).defaultNow(), updatedAt: timestamp('updatedAt', { mode: 'date', fsp: 3, }).defaultNow(), deletedAt: timestamp('deletedAt', { mode: 'date', fsp: 3, }), }, (ur) => ({ pk: primaryKey({ columns: [ur.organizationMembershipId, ur.roleId], name: 'pk', }), orgMemberIdIdx: index('orgMemberId_idx').on(ur.organizationMembershipId), roleIdIdx: index('roleId_idx').on(ur.roleId), organizationIdIdx: index('organizationId_idx').on(ur.organizationId), }), ) } export function getOrganizationMembershipRolesRelationsSchema( mysqlTable: MySqlTableFn, ) { const organizationMembershipRoles = getOrganizationMembershipRolesSchema(mysqlTable) const organizationMemberships = getOrganizationMembershipsSchema(mysqlTable) const roles = getRolesSchema(mysqlTable) const organizations = getOrganizationsSchema(mysqlTable) return relations(organizationMembershipRoles, ({ one }) => ({ organizationMembership: one(organizationMemberships, { fields: [organizationMembershipRoles.organizationMembershipId], references: [organizationMemberships.id], relationName: 'organizationMembership', }), role: one(roles, { fields: [organizationMembershipRoles.roleId], references: [roles.id], relationName: 'role', }), organization: one(organizations, { fields: [organizationMembershipRoles.organizationId], references: [organizations.id], relationName: 'organization', }), })) }