yuheng/SQL/schema.ts
expressgy fdc4d67092 feat: 添加Redis支持、雪花ID生成器及集群模式
- 新增Redis插件,支持分布式锁及缓存功能
- 引入雪花ID生成器,用于生成唯一用户ID
- 实现集群模式,支持多线程运行
- 优化用户注册逻辑,增加分布式锁机制
- 更新配置文件,添加Redis及雪花ID相关配置
- 修复部分代码格式及数据库字段类型
2025-03-26 00:42:33 +08:00

340 lines
13 KiB
TypeScript

import {
mysqlTable,
mysqlSchema,
AnyMySqlColumn,
primaryKey,
unique,
bigint,
int,
tinyint,
varchar,
datetime,
} from 'drizzle-orm/mysql-core';
import { sql } from 'drizzle-orm';
export const sysDict = mysqlTable(
'sys_dict',
{
id: bigint({ mode: 'number' }).autoincrement().notNull(),
version: int().default(0).notNull(),
pid: bigint({ mode: 'number' }).notNull(),
module: tinyint(),
dictKey: varchar('dict_key', { length: 255 }),
value: varchar({ length: 255 }),
description: varchar({ length: 255 }),
sort: int().default(0).notNull(),
status: int().notNull(),
createdBy: bigint('created_by', { mode: 'number' }).notNull(),
updatedBy: bigint('updated_by', { mode: 'number' }).notNull(),
createdAt: datetime('created_at', { mode: 'string' })
.default(sql`(CURRENT_TIMESTAMP)`)
.notNull(),
updatedAt: datetime('updated_at', { mode: 'string' })
.default(sql`(CURRENT_TIMESTAMP)`)
.notNull(),
},
table => [
primaryKey({ columns: [table.id], name: 'sys_dict_id' }),
unique('uniq_dict_key').on(table.dictKey, table.pid),
],
);
export const sysOrganization = mysqlTable(
'sys_organization',
{
orgId: bigint('org_id', { mode: 'number' }).autoincrement().notNull(),
pid: bigint({ mode: 'number' }).notNull(),
orgName: varchar('org_name', { length: 255 }),
orgCode: varchar('org_code', { length: 128 }),
orgType: int('org_type').notNull(),
description: varchar({ length: 255 }),
sort: int().default(0).notNull(),
status: int().notNull(),
createdBy: bigint('created_by', { mode: 'number' }).notNull(),
updatedBy: bigint('updated_by', { mode: 'number' }).notNull(),
createdAt: datetime('created_at', { mode: 'string' })
.default(sql`(CURRENT_TIMESTAMP)`)
.notNull(),
updatedAt: datetime('updated_at', { mode: 'string' })
.default(sql`(CURRENT_TIMESTAMP)`)
.notNull(),
},
table => [
primaryKey({ columns: [table.orgId], name: 'sys_organization_org_id' }),
unique('uniq_org_code').on(table.orgCode, table.pid),
unique('uniq_org_name').on(table.orgName, table.pid),
],
);
export const sysOrganizationManager = mysqlTable(
'sys_organization_manager',
{
id: bigint({ mode: 'number' }).autoincrement().notNull(),
version: int().default(0).notNull(),
orgId: bigint('org_id', { mode: 'number' }).notNull(),
userId: bigint('user_id', { mode: 'number' }).notNull(),
rank: int().notNull(),
description: varchar({ length: 255 }),
createdBy: bigint('created_by', { mode: 'number' }).notNull(),
updatedBy: bigint('updated_by', { mode: 'number' }).notNull(),
createdAt: datetime('created_at', { mode: 'string' })
.default(sql`(CURRENT_TIMESTAMP)`)
.notNull(),
updatedAt: datetime('updated_at', { mode: 'string' })
.default(sql`(CURRENT_TIMESTAMP)`)
.notNull(),
},
table => [
primaryKey({ columns: [table.id], name: 'sys_organization_manager_id' }),
unique('uniq_org_user').on(table.orgId, table.userId),
],
);
export const sysPermission = mysqlTable(
'sys_permission',
{
permId: bigint('perm_id', { mode: 'number' }).autoincrement().notNull(),
pid: bigint({ mode: 'number' }).notNull(),
permName: varchar('perm_name', { length: 255 }).notNull(),
permKey: varchar('perm_key', { length: 255 }).notNull(),
url: varchar({ length: 255 }),
avatarUrl: varchar('avatar_url', { length: 255 }),
description: varchar({ length: 255 }),
permType: int('perm_type').notNull(),
isVisible: int('is_visible').default(0).notNull(),
version: int().default(0).notNull(),
sort: int().default(0).notNull(),
status: int().notNull(),
createdBy: bigint('created_by', { mode: 'number' }).notNull(),
updatedBy: bigint('updated_by', { mode: 'number' }).notNull(),
createdAt: datetime('created_at', { mode: 'string' })
.default(sql`(CURRENT_TIMESTAMP)`)
.notNull(),
updatedAt: datetime('updated_at', { mode: 'string' })
.default(sql`(CURRENT_TIMESTAMP)`)
.notNull(),
},
table => [
primaryKey({ columns: [table.permId], name: 'sys_permission_perm_id' }),
unique('uniq_pid_name').on(table.permName, table.pid),
unique('uniq_perm_key').on(table.permKey),
],
);
export const sysReRolePermission = mysqlTable(
'sys_re_role_permission',
{
id: bigint({ mode: 'number' }).autoincrement().notNull(),
roleId: bigint('role_id', { mode: 'number' }).notNull(),
permId: bigint('perm_id', { mode: 'number' }).notNull(),
createdBy: bigint('created_by', { mode: 'number' }).notNull(),
updatedBy: bigint('updated_by', { mode: 'number' }).notNull(),
createdAt: datetime('created_at', { mode: 'string' })
.default(sql`(CURRENT_TIMESTAMP)`)
.notNull(),
updatedAt: datetime('updated_at', { mode: 'string' })
.default(sql`(CURRENT_TIMESTAMP)`)
.notNull(),
},
table => [
primaryKey({ columns: [table.id], name: 'sys_re_role_permission_id' }),
unique('uniq_perm_role').on(table.roleId, table.permId),
],
);
export const sysReUserOrganization = mysqlTable(
'sys_re_user_organization',
{
id: bigint({ mode: 'number' }).autoincrement().notNull(),
userId: bigint('user_id', { mode: 'number' }).notNull(),
orgId: bigint('org_id', { mode: 'number' }).notNull(),
version: int().default(0).notNull(),
createdBy: bigint('created_by', { mode: 'number' }).notNull(),
updatedBy: bigint('updated_by', { mode: 'number' }).notNull(),
createdAt: datetime('created_at', { mode: 'string' })
.default(sql`(CURRENT_TIMESTAMP)`)
.notNull(),
updatedAt: datetime('updated_at', { mode: 'string' })
.default(sql`(CURRENT_TIMESTAMP)`)
.notNull(),
},
table => [
primaryKey({ columns: [table.id], name: 'sys_re_user_organization_id' }),
unique('uniq_user_org').on(table.userId, table.orgId),
],
);
export const sysReUserRole = mysqlTable(
'sys_re_user_role',
{
id: bigint({ mode: 'number' }).autoincrement().notNull(),
userId: bigint('user_id', { mode: 'number' }).notNull(),
roleId: bigint('role_id', { mode: 'number' }).notNull(),
version: int().default(0).notNull(),
createdBy: bigint('created_by', { mode: 'number' }).notNull(),
updatedBy: bigint('updated_by', { mode: 'number' }).notNull(),
createdAt: datetime('created_at', { mode: 'string' })
.default(sql`(CURRENT_TIMESTAMP)`)
.notNull(),
updatedAt: datetime('updated_at', { mode: 'string' })
.default(sql`(CURRENT_TIMESTAMP)`)
.notNull(),
},
table => [
primaryKey({ columns: [table.id], name: 'sys_re_user_role_id' }),
unique('uniq_user_role').on(table.userId, table.roleId),
],
);
export const sysRole = mysqlTable(
'sys_role',
{
roleId: bigint('role_id', { mode: 'number' }).autoincrement().notNull(),
pid: bigint({ mode: 'number' }).notNull(),
roleName: varchar('role_name', { length: 255 }).notNull(),
roleKey: varchar('role_key', { length: 255 }).notNull(),
description: varchar({ length: 255 }),
status: int().notNull(),
createdBy: bigint('created_by', { mode: 'number' }).notNull(),
updatedBy: bigint('updated_by', { mode: 'number' }).notNull(),
createdAt: datetime('created_at', { mode: 'string' })
.default(sql`(CURRENT_TIMESTAMP)`)
.notNull(),
updatedAt: datetime('updated_at', { mode: 'string' })
.default(sql`(CURRENT_TIMESTAMP)`)
.notNull(),
},
table => [
primaryKey({ columns: [table.roleId], name: 'sys_role_role_id' }),
unique('uniq_role_pid').on(table.roleName, table.pid),
],
);
export const sysUser = mysqlTable(
'sys_user',
{
userId: bigint('user_id', { mode: 'number' }).notNull(),
pid: bigint({ mode: 'number' }).notNull(),
username: varchar({ length: 255 }).notNull(),
email: varchar({ length: 255 }).notNull(),
phone: varchar({ length: 255 }),
avatarUrl: varchar('avatar_url', { length: 255 }),
userType: tinyint('user_type'),
status: tinyint().default(0).notNull(),
createdBy: bigint('created_by', { mode: 'number' }).notNull(),
updatedBy: bigint('updated_by', { mode: 'number' }).notNull(),
createdAt: datetime('created_at', { mode: 'string' })
.default(sql`(CURRENT_TIMESTAMP)`)
.notNull(),
updatedAt: datetime('updated_at', { mode: 'string' })
.default(sql`(CURRENT_TIMESTAMP)`)
.notNull(),
},
table => [
primaryKey({ columns: [table.userId], name: 'sys_user_user_id' }),
unique('uniq_username').on(table.username),
unique('uniq_email').on(table.email),
],
);
export const sysUserAuth = mysqlTable(
'sys_user_auth',
{
userId: bigint('user_id', { mode: 'number' }).notNull(),
passwordHash: varchar('password_hash', { length: 255 }).notNull(),
passwordModified: datetime('password_modified', { mode: 'string' }).notNull(),
passwordExpire: datetime('password_expire', { mode: 'string' }),
},
table => [primaryKey({ columns: [table.userId], name: 'sys_user_auth_user_id' })],
);
export const sysUserAuthHistory = mysqlTable(
'sys_user_auth_history',
{
id: bigint({ mode: 'number' }).autoincrement().notNull(),
userId: bigint('user_id', { mode: 'number' }).notNull(),
passwordHash: varchar('password_hash', { length: 255 }).notNull(),
modifiedAt: varchar('modified_at', { length: 255 }).notNull(),
},
table => [primaryKey({ columns: [table.id], name: 'sys_user_auth_history_id' })],
);
export const sysUserFieldDefinition = mysqlTable(
'sys_user_field_definition',
{
fieldId: bigint('field_id', { mode: 'number' }).autoincrement().notNull(),
version: int().default(0).notNull(),
fieldName: varchar('field_name', { length: 255 }).notNull(),
fieldKey: varchar('field_key', { length: 255 }).notNull(),
fieldType: tinyint('field_type').notNull(),
dictModule: int('dict_module'),
isRequired: tinyint('is_required').default(0).notNull(),
limit: int(),
description: varchar({ length: 255 }),
defaultValue: varchar('default_value', { length: 255 }),
defaultOptions: varchar('default_options', { length: 255 }),
sort: int().default(0).notNull(),
status: int().notNull(),
createdBy: bigint('created_by', { mode: 'number' }).notNull(),
updatedBy: bigint('updated_by', { mode: 'number' }).notNull(),
createdAt: datetime('created_at', { mode: 'string' })
.default(sql`(CURRENT_TIMESTAMP)`)
.notNull(),
updatedAt: datetime('updated_at', { mode: 'string' })
.default(sql`(CURRENT_TIMESTAMP)`)
.notNull(),
},
table => [
primaryKey({ columns: [table.fieldId], name: 'sys_user_field_definition_field_id' }),
unique('uniq_field_name').on(table.fieldName),
unique('uniq_field_key').on(table.fieldKey),
],
);
export const sysUserFieldValue = mysqlTable(
'sys_user_field_value',
{
id: bigint({ mode: 'number' }).autoincrement().notNull(),
userId: bigint('user_id', { mode: 'number' }).notNull(),
fieldId: int('field_id').notNull(),
value: varchar({ length: 4096 }),
createdBy: bigint('created_by', { mode: 'number' }).notNull(),
updatedBy: bigint('updated_by', { mode: 'number' }).notNull(),
createdAt: datetime('created_at', { mode: 'string' })
.default(sql`(CURRENT_TIMESTAMP)`)
.notNull(),
updatedAt: datetime('updated_at', { mode: 'string' })
.default(sql`(CURRENT_TIMESTAMP)`)
.notNull(),
},
table => [
primaryKey({ columns: [table.id], name: 'sys_user_field_value_id' }),
unique('uniq_user_field').on(table.userId, table.fieldId),
],
);
export const sysUserProfile = mysqlTable(
'sys_user_profile',
{
id: bigint({ mode: 'number' }).autoincrement().notNull(),
version: int().default(0).notNull(),
name: varchar({ length: 32 }).notNull(),
profileKey: varchar('profile_key', { length: 255 }).notNull(),
description: varchar({ length: 255 }),
content: varchar({ length: 255 }),
createdBy: bigint('created_by', { mode: 'number' }).notNull(),
updatedBy: bigint('updated_by', { mode: 'number' }).notNull(),
createdAt: datetime('created_at', { mode: 'string' })
.default(sql`(CURRENT_TIMESTAMP)`)
.notNull(),
updatedAt: datetime('updated_at', { mode: 'string' })
.default(sql`(CURRENT_TIMESTAMP)`)
.notNull(),
},
table => [
primaryKey({ columns: [table.id], name: 'sys_user_profile_id' }),
unique('uniq_name').on(table.name),
unique('uniq_profile_key').on(table.profileKey),
],
);