- 新增Redis插件,支持分布式锁及缓存功能 - 引入雪花ID生成器,用于生成唯一用户ID - 实现集群模式,支持多线程运行 - 优化用户注册逻辑,增加分布式锁机制 - 更新配置文件,添加Redis及雪花ID相关配置 - 修复部分代码格式及数据库字段类型
340 lines
13 KiB
TypeScript
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),
|
|
],
|
|
);
|