feat: 增加DEFAULT_USER_PASSWORD,作为创建用户时的默认密码,添加p-limit库,添加DB_PARALLEL_LIMIT = 32环境变量作为“数据库批次操作默认并发数” 限制只有超级管理员才能创建超级管理员用户 删除用户时可以级联删除SelectionLog 添加zustand全局状态管理 一对多的院系管理功能 ,支持增删改查院系管理员信息、用户可以在header中切换管理的院系
This commit is contained in:
10
README.md
10
README.md
@@ -14,7 +14,7 @@ Hair Keeper是个诙谐有趣的名称,和项目内容毫无关系。
|
||||
- 数据和存储:pg(PostgreSQL) + ioredis + minio
|
||||
- 后台任务及消息队列:bullmq
|
||||
- AI大模型交互: ai + ai-sdk/react + ai-elements(基于shadcn/ui库添加组件)
|
||||
- 辅助性库:lodash + zod + date-fns + nanoid
|
||||
- 辅助性库:lodash + zod + date-fns + nanoid + zustand + p-limit
|
||||
- 其他:next-auth + bcryptjs + nuqs + superjson(前后端序列化类型安全) + copy-to-clipboard
|
||||
|
||||
## 项目约定
|
||||
@@ -27,11 +27,12 @@ Hair Keeper是个诙谐有趣的名称,和项目内容毫无关系。
|
||||
|
||||
### 后端
|
||||
- tRPC接口报错时可使用TRPCError,例如throw new TRPCError({ code: 'NOT_FOUND', message: '' })
|
||||
- server/trpc.ts中预定义了publicProcedure用于创建无权限限制、也不需要登录的api
|
||||
- server/trpc.ts中预定义了publicProcedurepermissionRequiredProcedure,用来创建限制特定权限访问的路由,例如permissionRequiredProcedure(Permissions.USER_MANAGE);空字符串表示无权限要求,但是需要用户登录;约定用permissionRequiredProcedure('SUPER_ADMIN_ONLY')限制超级管理员才能访问,该权限不在Permissions中定义,只有超级管理员才能绕过授权限制访问所有接口,因此SUPER_ADMIN_ONLY这个字符串只是一个通用的约定。
|
||||
- server/trpc.ts中导出了createTRPCRouter(本质是t.router)用来创建路由,预定义了publicProcedure用于创建无权限限制、也不需要登录的api
|
||||
- server/trpc.ts中预定义了permissionRequiredProcedure,用来创建限制特定权限访问的api,例如permissionRequiredProcedure(Permissions.USER_MANAGE);空字符串表示无权限要求,但是需要用户登录;约定用permissionRequiredProcedure('SUPER_ADMIN_ONLY')限制超级管理员才能访问,该权限不在Permissions中定义,只有超级管理员才能绕过授权限制访问所有接口,因此SUPER_ADMIN_ONLY这个字符串只是一个通用的约定。
|
||||
- 数据库批次操作时,使用`const dbParallelLimit = pLimit(parseInt(process.env.DB_PARALLEL_LIMIT || '16', 10))`控制最大并发数
|
||||
|
||||
### 数据和存储
|
||||
- Prisma 生成的客户端输出为默认路径,导入时使用`@prisma/client`
|
||||
- Prisma 生成的客户端输出为默认路径,导入时使用`@prisma/client`,可以从中导入定义的数据表的ts类型,例如`import type { User } from '@prisma/client'`
|
||||
- 数据库连接使用 `server/db.ts` 中的全局单例 `db`,不要直接实例化 PrismaClient
|
||||
- 时间字段统一使用 `@db.Timestamptz` 类型
|
||||
- 前后端参数传递尽量使用扁平结构而非嵌套结构
|
||||
@@ -58,6 +59,7 @@ Hair Keeper是个诙谐有趣的名称,和项目内容毫无关系。
|
||||
- `app/(main)/users/`:用户管理模块,提供用户CRUD、角色管理、批量授权等完整的用户管理功能的页面和组件实现
|
||||
- `hooks/`:可复用React Hooks库,部分复杂的组件也通过hook实现Headless UI逻辑与样式分离,组件中可复用的逻辑都可以放在这
|
||||
- `lib/trpc.ts`:创建并导出tRPC React客户端实例,用于前端与后端API通信
|
||||
- `lib/stores/`:通过zustand管理的全局的状态
|
||||
|
||||
### 后端
|
||||
- `server/routers/`:项目trpc api定义文件,开发者主要在这里定义和实现业务的后端API
|
||||
|
||||
Reference in New Issue
Block a user