feat: first commit
This commit is contained in:
117
server/prisma/migrations/20241026034430_/migration.sql
Normal file
117
server/prisma/migrations/20241026034430_/migration.sql
Normal file
@@ -0,0 +1,117 @@
|
||||
-- CreateTable
|
||||
CREATE TABLE "sys_user" (
|
||||
"id" SERIAL NOT NULL,
|
||||
"name" TEXT,
|
||||
"account" TEXT NOT NULL,
|
||||
"password" TEXT NOT NULL,
|
||||
"password_salt" TEXT NOT NULL,
|
||||
"status" SMALLINT NOT NULL DEFAULT 0,
|
||||
"avatar_id" INTEGER,
|
||||
"gender" SMALLINT NOT NULL DEFAULT 0,
|
||||
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updated_at" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "sys_user_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "sys_role" (
|
||||
"id" SERIAL NOT NULL,
|
||||
"code" TEXT NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"status" SMALLINT NOT NULL DEFAULT 0,
|
||||
|
||||
CONSTRAINT "sys_role_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "sys_user_role" (
|
||||
"id" SERIAL NOT NULL,
|
||||
"user_id" INTEGER NOT NULL,
|
||||
"role_id" INTEGER NOT NULL,
|
||||
|
||||
CONSTRAINT "sys_user_role_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "files" (
|
||||
"id" SERIAL NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"path" TEXT NOT NULL,
|
||||
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "files_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "sys_permission" (
|
||||
"id" SERIAL NOT NULL,
|
||||
"type" INTEGER NOT NULL,
|
||||
|
||||
CONSTRAINT "sys_permission_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "sys_menu" (
|
||||
"id" SERIAL NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"url" TEXT NOT NULL,
|
||||
"parent_id" INTEGER NOT NULL DEFAULT 0,
|
||||
|
||||
CONSTRAINT "sys_menu_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "sys_menu_permission" (
|
||||
"id" SERIAL NOT NULL,
|
||||
"menu_id" INTEGER NOT NULL,
|
||||
"permission_id" INTEGER NOT NULL,
|
||||
|
||||
CONSTRAINT "sys_menu_permission_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "sys_role_permission" (
|
||||
"id" SERIAL NOT NULL,
|
||||
"role_id" INTEGER NOT NULL,
|
||||
"permission_id" INTEGER NOT NULL,
|
||||
|
||||
CONSTRAINT "sys_role_permission_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "sys_config" (
|
||||
"key" TEXT NOT NULL,
|
||||
"value" TEXT NOT NULL,
|
||||
"remark" TEXT
|
||||
);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "sys_user_account_key" ON "sys_user"("account");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "sys_user_avatar_id_idx" ON "sys_user"("avatar_id");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "sys_role_code_key" ON "sys_role"("code");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "sys_user_role_user_id_idx" ON "sys_user_role"("user_id");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "sys_user_role_role_id_idx" ON "sys_user_role"("role_id");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "sys_menu_permission_menu_id_idx" ON "sys_menu_permission"("menu_id");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "sys_menu_permission_permission_id_idx" ON "sys_menu_permission"("permission_id");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "sys_role_permission_role_id_idx" ON "sys_role_permission"("role_id");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "sys_role_permission_permission_id_idx" ON "sys_role_permission"("permission_id");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "sys_config_key_key" ON "sys_config"("key");
|
||||
3
server/prisma/migrations/migration_lock.toml
Normal file
3
server/prisma/migrations/migration_lock.toml
Normal file
@@ -0,0 +1,3 @@
|
||||
# Please do not edit this file manually
|
||||
# It should be added in your version-control system (i.e. Git)
|
||||
provider = "postgresql"
|
||||
123
server/prisma/schema.prisma
Normal file
123
server/prisma/schema.prisma
Normal file
@@ -0,0 +1,123 @@
|
||||
// This is your Prisma schema file,
|
||||
// learn more about it in the docs: https://pris.ly/d/prisma-schema
|
||||
|
||||
generator client {
|
||||
provider = "prisma-client-js"
|
||||
}
|
||||
|
||||
datasource db {
|
||||
provider = "postgresql"
|
||||
url = env("DATABASE_URL")
|
||||
relationMode = "prisma"
|
||||
}
|
||||
|
||||
// 系统用户表
|
||||
model SysUser {
|
||||
id Int @id @default(autoincrement()) /// 主键id
|
||||
name String? /// 用户姓名
|
||||
account String @unique /// 账户
|
||||
password String /// 密码
|
||||
passwordSalt String @map("password_salt") /// 密码盐
|
||||
status Int @default(0) @db.SmallInt /// 用户状态
|
||||
avatarId Int? @map("avatar_id") /// 用户头像id
|
||||
avatar Files? @relation(fields: [avatarId], references: [id])
|
||||
gender Int @default(0) @db.SmallInt /// 用户性别
|
||||
createdAt DateTime @default(now()) @map("created_at") /// 创建时间
|
||||
updatedAt DateTime @updatedAt @map("updated_at") /// 修改时间
|
||||
userRole SysUserRole[]
|
||||
|
||||
@@index([avatarId])
|
||||
@@map("sys_user")
|
||||
}
|
||||
|
||||
// 系统角色表
|
||||
model SysRole {
|
||||
id Int @id @default(autoincrement())
|
||||
code String @unique
|
||||
name String
|
||||
status Int @default(0) @db.SmallInt /// 角色状态
|
||||
sysRolePermission SysRolePermission[]
|
||||
sysUserRole SysUserRole[]
|
||||
|
||||
@@map("sys_role")
|
||||
}
|
||||
|
||||
// 用户角色关联表
|
||||
model SysUserRole {
|
||||
id Int @id @default(autoincrement())
|
||||
userId Int @map("user_id")
|
||||
roleId Int @map("role_id")
|
||||
user SysUser @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
role SysRole @relation(fields: [roleId], references: [id], onDelete: Cascade)
|
||||
|
||||
@@index([userId])
|
||||
@@index([roleId])
|
||||
@@map("sys_user_role")
|
||||
}
|
||||
|
||||
// 文件表
|
||||
model Files {
|
||||
id Int @id @default(autoincrement())
|
||||
name String /// 文件名称
|
||||
path String
|
||||
createdAt DateTime @default(now()) @map("created_at") /// 创建时间
|
||||
sysUser SysUser[]
|
||||
|
||||
@@map("files")
|
||||
}
|
||||
|
||||
// 权限表
|
||||
model SysPermission {
|
||||
id Int @id @default(autoincrement())
|
||||
type Int
|
||||
sysRolePermission SysRolePermission[]
|
||||
sysMenuPermission SysMenuPermission[]
|
||||
|
||||
@@map("sys_permission")
|
||||
}
|
||||
|
||||
// 系统菜单表
|
||||
model SysMenu {
|
||||
id Int @id @default(autoincrement())
|
||||
name String
|
||||
url String
|
||||
parentId Int @default(0) @map("parent_id")
|
||||
sysMenuPermission SysMenuPermission[]
|
||||
|
||||
@@map("sys_menu")
|
||||
}
|
||||
|
||||
// 菜单权限关联表
|
||||
model SysMenuPermission {
|
||||
id Int @id @default(autoincrement())
|
||||
menuId Int @map("menu_id")
|
||||
permissionId Int @map("permission_id")
|
||||
menu SysMenu @relation(fields: [menuId], references: [id], onDelete: Cascade)
|
||||
permission SysPermission @relation(fields: [permissionId], references: [id], onDelete: Cascade)
|
||||
|
||||
@@index([menuId])
|
||||
@@index([permissionId])
|
||||
@@map("sys_menu_permission")
|
||||
}
|
||||
|
||||
// 角色权限关联表
|
||||
model SysRolePermission {
|
||||
id Int @id @default(autoincrement())
|
||||
roleId Int @map("role_id")
|
||||
permissionId Int @map("permission_id")
|
||||
role SysRole @relation(fields: [roleId], references: [id], onDelete: Cascade)
|
||||
permission SysPermission @relation(fields: [permissionId], references: [id], onDelete: Cascade)
|
||||
|
||||
@@index([roleId])
|
||||
@@index([permissionId])
|
||||
@@map("sys_role_permission")
|
||||
}
|
||||
|
||||
// 系统配置
|
||||
model SysConfig {
|
||||
key String @unique
|
||||
value String
|
||||
remark String?
|
||||
|
||||
@@map("sys_config")
|
||||
}
|
||||
51
server/prisma/seed.ts
Normal file
51
server/prisma/seed.ts
Normal file
@@ -0,0 +1,51 @@
|
||||
import { PrismaClient } from '@prisma/client';
|
||||
const prisma = new PrismaClient();
|
||||
|
||||
enum PermissionType {
|
||||
Menu,
|
||||
}
|
||||
|
||||
async function main() {
|
||||
await prisma.sysUser.upsert({
|
||||
where: { account: 'admin' },
|
||||
update: {},
|
||||
create: {
|
||||
name: '管理员',
|
||||
account: 'admin',
|
||||
password: '$2a$10$rWb52cHK1hrWuQQg3LiOJ.crDfIqjoOIoglGM96a.Ao1DL/dQwKCu',
|
||||
passwordSalt: '$2a$10$rWb52cHK1hrWuQQg3LiOJ.',
|
||||
status: 1,
|
||||
},
|
||||
});
|
||||
const menus = [
|
||||
{ name: '用户管理', url: 'user', parentId: 0 },
|
||||
{ name: '角色管理', url: 'role', parentId: 0 },
|
||||
{ name: '菜单管理', url: 'menu', parentId: 0 },
|
||||
];
|
||||
|
||||
for (const menu of menus) {
|
||||
// 创建菜单
|
||||
await prisma.$transaction(async (_prisma) => {
|
||||
const { id: menuId } = await _prisma.sysMenu.create({ data: menu });
|
||||
// 创建菜单权限
|
||||
const { id: permissionId } = await _prisma.sysPermission.create({
|
||||
data: { type: PermissionType.Menu },
|
||||
});
|
||||
// 关联权限和菜单
|
||||
await _prisma.sysMenuPermission.create({
|
||||
data: { menuId, permissionId },
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
main()
|
||||
.then(async () => {
|
||||
console.log('seed done!');
|
||||
await prisma.$disconnect();
|
||||
})
|
||||
.catch(async (e) => {
|
||||
console.error(e);
|
||||
await prisma.$disconnect();
|
||||
process.exit(1);
|
||||
});
|
||||
Reference in New Issue
Block a user