背景
当前版本已具备短链、活码、账户所有权、单级管理员审核与访问统计,但仍是单组织模型。需要在保持 SQLite / MySQL、单体部署和现有公开链接兼容的前提下,演进为可私有部署也可平台运营的 SaaS 基础。
目标
1. 负载均衡短链目标池
- 一个稳定短码可维护多个目标 URL。
- 支持
round_robin、random、weighted_random、least_used、ip_hash。
- 目标支持启停、权重、排序、有效期、访问上限、健康状态和独立命中计数。
- 选择、游标和计数更新在事务内完成;无可用目标时回退到原目标或备用链接。
- 访问日志能够追踪实际命中的目标。
2. 多租户
- 账户可加入多个租户并切换当前工作区。
- 租户角色至少包括
owner、admin、reviewer、member、analyst。
- 所有资源列表、详情、统计、编辑、删除、审批与日志均执行服务端租户边界校验。
- 现有账户和资源通过迁移自动进入个人工作区,不破坏已有部署。
- 平台管理员与租户管理员权限分离。
3. 订阅与配额
- 套餐、租户订阅、订阅变更申请、订阅事件和月度用量模型。
- 默认 Free / Pro / Business / Enterprise 套餐;额度覆盖成员数、短链数、活码数、单短链目标数和月访问量。
- 资源创建、成员邀请、目标池规模和公开访问量在服务端统一执行额度检查。
- 支付提供商保持可插拔;首期支持平台管理员人工审批订阅变更,不把 Stripe 等供应商写死到核心域。
- 支持 trialing / active / past_due / canceled / expired 等生命周期及周期结束取消。
4. 两级审批
- 新建或修改内容进入
tenant_pending。
- 租户 owner/admin/reviewer 审核通过后进入
platform_pending。
- 仅平台管理员可完成最终
approved / platform_rejected。
- 任意内容性修改自动递增版本并重置为租户待审。
- 短链、活码和活码子项均记录不可变审批事件;公开入口仅在平台终审通过后生效。
5. 管理端、测试与文档
- 工作区切换、租户成员、订阅/额度、审批中心、平台租户/套餐/订阅申请管理。
- 中英文文案、响应式和深浅色兼容。
- SQLite 与 MySQL 迁移。
- Store、路由权限、审批状态机、配额与分发策略测试。
- 架构、SaaS 模型、升级和 API 文档。
兼容性原则
- 现有短码 URL 与单目标行为保持不变。
- 未配置目标池时继续使用
short_links.target_url。
- 迁移不重建旧表,不要求外部缓存或消息队列。
- 私有单租户部署仍可使用默认个人工作区与 Free/Enterprise 手工套餐。
验收检查
gofmt -w <changed-go-files>
go test ./...
go vet ./...
go build -o bin/ai-shortlink ./cmd/server
node --check web/static/app.js
node --check web/static/platform_ext.js
git diff --check
背景
当前版本已具备短链、活码、账户所有权、单级管理员审核与访问统计,但仍是单组织模型。需要在保持 SQLite / MySQL、单体部署和现有公开链接兼容的前提下,演进为可私有部署也可平台运营的 SaaS 基础。
目标
1. 负载均衡短链目标池
round_robin、random、weighted_random、least_used、ip_hash。2. 多租户
owner、admin、reviewer、member、analyst。3. 订阅与配额
4. 两级审批
tenant_pending。platform_pending。approved/platform_rejected。5. 管理端、测试与文档
兼容性原则
short_links.target_url。验收检查