feat: first commit

This commit is contained in:
2024-10-26 12:10:13 +08:00
parent b244826aa1
commit b064c4cb87
158 changed files with 18888 additions and 1 deletions

View 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");

View 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
View 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
View 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);
});