Skip to content

Commit 4e31c58

Browse files
LyaQanYiclaude
authored andcommitted
chore: 删除从未被调用的 /api/personal_dynamics 端点
`POST /api/personal_dynamics`(system_router.py)在 static/、templates/、 NEKO-PC/ 与运行期前端均 grep 不到任何调用方;后端唯一真正消费 personal_dynamics 数据的地方是 proactive_chat handler 内部直接 `await fetch_personal_dynamics(...)`,不经过自身的 HTTP 路由。 死代码 + 命名违和(资源型路径却用 POST),按"发现即清理"原则删除。 `fetch_personal_dynamics` / `format_personal_dynamics` / `_log_personal_dynamics` 全部保留——它们仍被 proactive_chat 使用。 同步删除 #1530 为该端点加的 CSRF canary 用例 (tests/unit/test_uncovered_endpoints_csrf.py 的 UNCOVERED_ENDPOINTS): 端点删除后该参数化用例只会命中 404,而非其断言的 403,必须一并移除。 (已 rebase 到最新 main,解决 system_router.py 一处文本冲突。) verified: uv run pytest tests/unit/test_uncovered_endpoints_csrf.py -> 14 passed uv run pytest tests/unit/ -k "personal or proactive" -> 201 passed Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent 9789749 commit 4e31c58

2 files changed

Lines changed: 0 additions & 49 deletions

File tree

main_routers/system_router.py

Lines changed: 0 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -7481,54 +7481,6 @@ async def translate_text_api(request: Request):
74817481
"target_lang": "zh"
74827482
}
74837483

7484-
# ========== 个性化内容接口 ==========
7485-
7486-
@router.post('/personal_dynamics')
7487-
async def get_personal_dynamics(request: Request):
7488-
"""
7489-
获取个性化内容数据
7490-
"""
7491-
validation_error = _validate_local_mutation_request(request)
7492-
if validation_error is not None:
7493-
return validation_error
7494-
7495-
from utils.web_scraper import fetch_personal_dynamics, format_personal_dynamics
7496-
try:
7497-
7498-
data = await request.json()
7499-
limit = data.get('limit', 10)
7500-
7501-
# 获取个性化内容
7502-
personal_content = await fetch_personal_dynamics(limit=limit)
7503-
7504-
if not personal_content['success']:
7505-
return JSONResponse({
7506-
"success": False,
7507-
"error": "无法获取个性化内容",
7508-
"detail": personal_content.get('error', '未知错误')
7509-
}, status_code=500)
7510-
7511-
# 格式化内容用于前端显示
7512-
formatted_content = format_personal_dynamics(personal_content)
7513-
7514-
return JSONResponse({
7515-
"success": True,
7516-
"data": {
7517-
"raw": personal_content,
7518-
"formatted": formatted_content,
7519-
"platforms": [k for k in personal_content.keys() if k not in ('success', 'error', 'region')]
7520-
}
7521-
})
7522-
7523-
except Exception as e:
7524-
logger.error(f"获取个性化内容失败: {e}")
7525-
return JSONResponse({
7526-
"success": False,
7527-
"error": "服务器内部错误",
7528-
"detail": str(e)
7529-
}, status_code=500)
7530-
7531-
75327484
# Self-register the mini-game-invite keyword matcher with main_logic's
75337485
# event bus. Same rationale as plugin/core/state.py: ``main_logic.core``
75347486
# previously imported this function directly (a layering inversion);

tests/unit/test_uncovered_endpoints_csrf.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ def unauthenticated_client():
4747
("/api/proactive_chat", {"json": {"lanlan_name": "Yui"}}),
4848
("/api/proactive/music_played_through", {"json": {"lanlan_name": "Yui"}}),
4949
("/api/translate", {"json": {"text": "hello", "target_lang": "zh"}}),
50-
("/api/personal_dynamics", {"json": {"limit": 5}}),
5150
]
5251

5352

0 commit comments

Comments
 (0)