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:
23
AGENTS.md
23
AGENTS.md
@@ -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()` 函数中
|
||||
|
||||
## 代码模式
|
||||
|
||||
|
||||
Reference in New Issue
Block a user