docs: 重构付费系统设计文档

AGENTS.md:
- 支付系统章节新增三种支付模式(微信/邀请码/管理员)
- 添加累积计算逻辑说明
- 说明永久会员使用 2099-12-31 而非 NULL

IMPROVEMENTS.md:
- 重构 12.1-12.7 章节为新的付费系统设计
- 添加 memberships 表设计(冗余表提高查询性能)
- 添加 invitation_codes 表设计
- 详细说明累积计算逻辑和代码示例
- 更新邀请码接口设计(增加 paid_days 字段)
- 更新后端/前端实现要点
- 邀请码生成规则改为 Y/M/P 类型标识
This commit is contained in:
2026-04-17 21:44:27 +08:00
parent 75cdb1d222
commit e02644d6d7
2 changed files with 256 additions and 139 deletions

View File

@@ -126,11 +126,24 @@ title, date, hour, min, longitude, latitude, ...
## 支付系统
### 支付状态逻辑
### 支付模式
| 模式 | 来源 | 处理方式 |
|------|------|---------|
| 微信支付 | `payment_orders` | 收到微信回调后确认,累积计算有效期 |
| 邀请码 | `invitation_codes` | 核销后直接激活,累积计算有效期 |
| 管理员开通 | 直接 UPDATE | 后台手动设置 |
### 累积计算逻辑
用户多次购买时,有效期会累加而非覆盖:
```rust
is_paid_active = is_paid && (paid_expires_at.is_none() || paid_expires_at > Utc::now())
// 新到期时间 = MAX(当前到期, 现在) + 本次套餐天数
let base_time = std::cmp::max(current_expires, Utc::now());
let new_expires = base_time + days(pkg_days);
```
### 永久会员
永久会员的 `expires_at` 设为 `2099-12-31` 而非 NULL。
### 配额限制
- 未付费用户限制为 `FREE_USER_DATA_LIMIT` 条记录(环境变量,默认 20
- 付费用户(活跃状态)无限制
@@ -141,14 +154,14 @@ is_paid_active = is_paid && (paid_expires_at.is_none() || paid_expires_at > Utc:
PUT /api/admin/users/{id}/payment
{
"is_paid": true,
"paid_expires_at": "2026-12-31T23:59:59Z" // 可选null 表示永久
"paid_expires_at": "2026-12-31T23:59:59Z"
}
```
### 支付处理器
- 文件:`src/handlers/payment.rs`
- `mock-confirm` 接口仅用于测试环境,未来替换为真实微信支付回调时只需修改此函数
- 套餐金额常量定义在 `payment.rs``get_package_info()` 函数中
- `mock-confirm` 接口仅用于测试环境
- 套餐金额常量定义在 `get_package_info()` 函数中
## 代码模式