docs(plans): 记录 K16 返工与限流往返验证
This commit is contained in:
1 parent
35d92c0148
commit
21e0d7f383
3 files changed
+156
-5
No files matched your search
@@ -3158,6 +3158,137 @@ uid=UDAYJR-_E
|
||||
|
||||
---
|
||||
|
||||
## 2026-10-17 K16 返工:sys_config 优先 + @Value 兜底
|
||||
|
||||
### 33.1 返工范围
|
||||
|
||||
K16 首版合并后,用户要求明确区分后台运行配置与 yml fallback:
|
||||
|
||||
- `AppAuthService` 运行时优先读取 `sys_config`:
|
||||
`app.register.max-per-ip-per-day`、`app.register.max-per-device-per-day`;
|
||||
- 键缺失或非整数时,回退 `@Value` 注入的
|
||||
`fruitshorts.auth.register-max-*`;
|
||||
- yml 中的值只作 fallback,默认 5 / 3;≤0 仍表示不限制。
|
||||
|
||||
返工分支:`fix/k16-register-config-fallback`。
|
||||
|
||||
### 33.2 TDD 与测试
|
||||
|
||||
先把非数字配置用例改为验证 @Value fallback=2,旧实现红灯:
|
||||
|
||||
```text
|
||||
Could not find field 'maxRegisterPerIpPerDay'
|
||||
Tests run: 18, Failures: 0, Errors: 1, Skipped: 0
|
||||
BUILD FAILURE
|
||||
```
|
||||
|
||||
增加注入字段并接入 registerLimit 后,定向测试转绿:
|
||||
|
||||
```text
|
||||
RUNNING AppAuthServiceTest
|
||||
Tests run: 18, Failures: 0, Errors: 0, Skipped: 0
|
||||
BUILD SUCCESS
|
||||
```
|
||||
|
||||
全量测试:
|
||||
|
||||
```text
|
||||
$ mvn test
|
||||
[INFO] fruitshorts-module-user ............................ SUCCESS
|
||||
[INFO] fruitshorts-app-api ............................... SUCCESS
|
||||
[INFO] BUILD SUCCESS
|
||||
```
|
||||
|
||||
代码提交:
|
||||
|
||||
```text
|
||||
35d92c0 fix(backend): 后台注册限流配置优先并保留注入兜底
|
||||
```
|
||||
|
||||
### 33.3 数据库与后台接口
|
||||
|
||||
重新执行 `sql/data-phase1.sql` 中的幂等插入:
|
||||
|
||||
```text
|
||||
INSERT 0 0
|
||||
```
|
||||
|
||||
查询结果:
|
||||
|
||||
```text
|
||||
config_key | config_value | remark
|
||||
app.register.max-per-device-per-day | 0 | 0=不限制;生产建议 3
|
||||
app.register.max-per-ip-per-day | 0 | 0=不限制;生产建议 5
|
||||
(2 rows)
|
||||
```
|
||||
|
||||
使用本机开发管理员登录后,`GET /admin/configs` 返回:
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 0,
|
||||
"message": "ok",
|
||||
"configs": [
|
||||
{
|
||||
"key": "app.register.max-per-device-per-day",
|
||||
"value": "0",
|
||||
"remark": "0=不限制;生产建议 3"
|
||||
},
|
||||
{
|
||||
"key": "app.register.max-per-ip-per-day",
|
||||
"value": "0",
|
||||
"remark": "0=不限制;生产建议 5"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
现有 `SettingsView.vue` 已使用 `listConfigsApi` / `updateConfigsApi`,
|
||||
页面上的两个数值输入项可直接读写这两键。
|
||||
|
||||
### 33.4 阈值 2 往返验证
|
||||
|
||||
通过后台 `PUT /admin/configs` 把 IP 上限临时设为 2、设备上限设为 0,
|
||||
使用同一条测试 IP 连续注册:
|
||||
|
||||
```text
|
||||
attempt 1 HTTP 200 code=0 message=ok
|
||||
attempt 2 HTTP 200 code=0 message=ok
|
||||
attempt 3 HTTP 200 code=429 message=当前网络注册过于频繁,请稍后再试
|
||||
```
|
||||
|
||||
随后通过同一后台接口恢复 IP=0,再注册一次:
|
||||
|
||||
```text
|
||||
attempt 4 HTTP 200 code=0 message=ok
|
||||
```
|
||||
|
||||
说明:当前统一响应包装对外使用 HTTP 200,业务码在 `code` 字段返回 429。
|
||||
|
||||
### 33.5 打包与 8081
|
||||
|
||||
```text
|
||||
$ mvn -pl fruitshorts-app-api -am package -DskipTests
|
||||
[INFO] BUILD SUCCESS
|
||||
```
|
||||
|
||||
通过 `launchctl kickstart -k gui/501/com.fruitshorts.app-api` 重启:
|
||||
|
||||
```text
|
||||
before PID: 80642
|
||||
after PID: 94657
|
||||
java 94657 ... TCP *:8081 (LISTEN)
|
||||
```
|
||||
|
||||
健康检查:
|
||||
|
||||
```text
|
||||
{"code":0,"message":"ok","data":{"status":"UP","app":"fruitshorts-app-api","profiles":"","time":"2026-10-17T23:38:32.363463"}}
|
||||
HTTP 200
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 2026-10-17 iOS 构建阻塞:固定 shared_preferences_foundation 2.5.6
|
||||
|
||||
### 25.1 现象与根因
|
||||
|
||||
Reference in new issue
Block a user