@coursebuilder/adapter-drizzle
Version:
Drizzle adapter for Course Builder.
76 lines (72 loc) • 2.28 kB
text/typescript
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',
}),
}))
}