refactor: purge Node.js, Rust is the one true backend
- Moved boosapi-rs/* to repo root - Deleted all Node.js source (src/server/, src/web/, scripts/) - Deleted node_modules, package.json, tsconfig, vite.config - Updated .gitignore and AGENTS.md for Rust-only stack - Fixed static file path for frontend dist/web/ - Dockerfile stays the same (already Rust-only) - Kept dist/web/ for Rust static serving
This commit is contained in:
@@ -0,0 +1,97 @@
|
||||
# SaaS 用户管理重构计划
|
||||
|
||||
**目标:** 将现有单用户系统重构为 SaaS 多租户架构,支持组织管理、成员邀请、套餐限制
|
||||
|
||||
**核心变更:**
|
||||
1. 新增 `organizations` + `organization_members` 表
|
||||
2. 新增 `invitations` 表(邀请码注册)
|
||||
3. 用户注册改为必须关联组织或创建组织
|
||||
4. 合并 `/api/admin/users` 和 `/api/users` 路由
|
||||
5. 前端增加组织管理页面
|
||||
6. 新增 `plan_limits` 套餐限制系统
|
||||
|
||||
---
|
||||
|
||||
## 任务清单
|
||||
|
||||
### Task 1: 数据库 Schema — 新增组织相关表
|
||||
|
||||
**文件:** `src/server/db/schema.ts`
|
||||
|
||||
新增三个表:
|
||||
- `organizations` (id, name, slug, plan, status, createdAt, updatedAt)
|
||||
- `organization_members` (id, orgId, userId, role, status, joinedAt)
|
||||
- `invitations` (id, orgId, email, token, role, invitedBy, status, expiresAt, createdAt)
|
||||
|
||||
修改 `users` 表:新增 `emailVerified`, `avatarUrl`
|
||||
|
||||
### Task 2: 后端 Service — OrganizationService
|
||||
|
||||
**文件:** `src/server/services/organizationService.ts`
|
||||
|
||||
- `createOrganization(name, creatorUserId)` → 创建组织 + 添加创建者为 owner
|
||||
- `getOrganization(id)` → 查组织信息
|
||||
- `listUserOrganizations(userId)` → 用户所在组织列表
|
||||
- `addMember(orgId, userId, role)` → 添加成员
|
||||
- `removeMember(orgId, userId)` → 移除成员
|
||||
- `updateMemberRole(orgId, userId, role)` → 改角色
|
||||
|
||||
### Task 3: 后端 Service — InvitationService
|
||||
|
||||
**文件:** `src/server/services/invitationService.ts`
|
||||
|
||||
- `createInvitation(orgId, email, role, invitedBy)` → 生成邀请
|
||||
- `acceptInvitation(token, userId)` → 接受邀请
|
||||
- `listInvitations(orgId)` → 组织邀请列表
|
||||
- `cancelInvitation(id)` → 撤销邀请
|
||||
|
||||
### Task 4: 重构 UserService — 支持组织注册
|
||||
|
||||
**文件:** `src/server/services/userService.ts`
|
||||
|
||||
- 注册时可以选择加入组织或创建新组织
|
||||
- 增加 `plan_limits` 查询
|
||||
- JWT payload 增加 `orgId`
|
||||
|
||||
### Task 5: 重构 Routes — 合并 admin/users
|
||||
|
||||
**文件:** `src/server/routes/api/users.ts`
|
||||
|
||||
- 移除 `/api/users/register` 和 `/api/users/login` 的公开注册(改为邀请制)
|
||||
- 合并 admin 功能到 `users.ts`,通过 `requireAdmin` 中间件控制
|
||||
- 删除 `src/server/routes/api/adminUsers.ts`
|
||||
|
||||
### Task 6: 新增 Organization Routes
|
||||
|
||||
**文件:** `src/server/routes/api/organizations.ts`
|
||||
|
||||
- `GET /api/organizations` — 用户所在组织列表
|
||||
- `POST /api/organizations` — 创建组织
|
||||
- `GET /api/organizations/:id` — 组织详情(仅成员)
|
||||
- `PATCH /api/organizations/:id` — 更新组织
|
||||
- `GET /api/organizations/:id/members` — 成员列表
|
||||
- `POST /api/organizations/:id/members` — 邀请成员
|
||||
- `DELETE /api/organizations/:id/members/:userId` — 移除成员
|
||||
- `POST /api/organizations/:id/invitations` — 创建邀请
|
||||
- `GET /api/organizations/:id/invitations` — 邀请列表
|
||||
|
||||
### Task 7: Plan limits 枚举
|
||||
|
||||
**文件:** `src/server/services/planService.ts`
|
||||
|
||||
```typescript
|
||||
export const PLAN_LIMITS = {
|
||||
free: { maxMembers: 3, maxApiKeys: 5, maxRequestsPerDay: 1000 },
|
||||
pro: { maxMembers: 10, maxApiKeys: 20, maxRequestsPerDay: 10000 },
|
||||
enterprise: { maxMembers: 100, maxApiKeys: 100, maxRequestsPerDay: 100000 },
|
||||
} as const;
|
||||
```
|
||||
|
||||
### Task 8: 前端 — 组织管理页面
|
||||
|
||||
**文件:** `src/web/pages/OrganizationSettings.tsx`
|
||||
|
||||
- 组织信息编辑(名称、slug)
|
||||
- 成员管理列表(角色切换、移除)
|
||||
- 邀请管理(生成邀请链接、撤销)
|
||||
- 套餐信息与用量展示
|
||||
Reference in New Issue
Block a user