yuheng/SQL/schema.ts
expressgy 81953dd44c feat: 添加JWT认证和模块管理功能
- 新增JWT认证插件,支持用户登录、刷新Token功能
- 添加系统模块管理功能,包括模块的创建、更新和查询
- 更新用户服务,支持用户注册、登录和Token刷新
- 修改数据库表结构,添加模块相关表和字段
- 更新文档,添加JWT认证和模块管理相关说明
2025-03-26 19:07:09 +08:00

263 lines
12 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" }).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" }),
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 sysModule = mysqlTable("sys_module", {
id: int().autoincrement().notNull(),
version: int().default(0).notNull(),
name: varchar({ length: 32 }).notNull(),
moduleKey: varchar("module_key", { length: 255 }).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" }),
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_module_id"}),
unique("uniq_name").on(table.name),
unique("uniq_module_key").on(table.moduleKey),
]);
export const sysOrganization = mysqlTable("sys_organization", {
orgId: bigint("org_id", { mode: "number" }).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" }),
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" }).notNull(),
version: int().default(0).notNull(),
orgId: bigint("org_id", { mode: "number" }).notNull(),
userId: bigint("user_id", { mode: "number" }).notNull(),
rank: int().notNull(),
status: int().notNull(),
description: varchar({ length: 255 }),
createdBy: bigint("created_by", { mode: "number" }).notNull(),
updatedBy: bigint("updated_by", { mode: "number" }),
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" }).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" }),
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 sysProfile = mysqlTable("sys_profile", {
id: bigint({ mode: "number" }).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" }),
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_profile_id"}),
unique("uniq_name").on(table.name),
unique("uniq_profile_key").on(table.profileKey),
]);
export const sysReRolePermission = mysqlTable("sys_re_role_permission", {
id: bigint({ mode: "number" }).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" }),
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" }).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" }),
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" }).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" }),
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" }).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" }),
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" }),
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'}).default(sql`(CURRENT_TIMESTAMP)`).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: datetime("modified_at", { mode: 'string'}).default(sql`(CURRENT_TIMESTAMP)`).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" }).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" }),
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" }),
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),
]);