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:
boos
2026-05-18 09:11:29 +08:00
parent 725f44699a
commit 5d29f03d50
1165 changed files with 271 additions and 323571 deletions
+97
View File
@@ -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)
- 成员管理列表(角色切换、移除)
- 邀请管理(生成邀请链接、撤销)
- 套餐信息与用量展示