Archived
feat: 支持纯 FastAPI 模式(根路径服务前端)+ 修任务端点路径
- web/app.py:create_app(api_prefix=) 参数化前缀——'' 即根路径模式, 87 条路由直接服务前端使用的路径,无需 Flask 兜底 - web/main.py:WEB_MODE=dual(默认,迁移期)/ fastapi(纯 FastAPI)切换 - 修真实路径缺陷:任务类端点漏了 /api 段(Flask 为 /api/topen 等, 原写成 /topen),根路径模式下前端会 404。已改为 /api/topen、/api/queue、 /api/batch_progress、/api/task/*;fe_error 同步修正 - 奇偶校验路径映射同步更新 验证: - tests/test_root_mode.py 新增 66 项:前端调用的每条路径在纯 FastAPI 模式下 均非 404;root 模式不再暴露 /api/v1 - 纯 FastAPI 模式真实启动(uvicorn, PORT=5002)实测: /health、/、/static 200,/song、/api/task/list 401(鉴权生效) - 全套 pytest 135/135;ruff All checks passed;pyright 0 errors;奇偶 36/36
This commit is contained in:
1 parent
cd0f1f78a3
commit
f5d1e3c3a9
5 files changed
+107
-28
No files matched your search
@@ -62,7 +62,7 @@ def _semaphores():
|
||||
return legacy.BATCH_ZIP_SEM, legacy.api_service.downloader._download_semaphore
|
||||
|
||||
|
||||
@router.api_route('/topen', methods=['GET', 'POST'])
|
||||
@router.api_route('/api/topen', methods=['GET', 'POST'])
|
||||
async def topen(request: Request):
|
||||
"""接口请求统计(实时)——锁内快照,避免 total 与明细不一致。"""
|
||||
import main as legacy
|
||||
@@ -87,7 +87,7 @@ async def topen(request: Request):
|
||||
}, '获取请求统计成功')
|
||||
|
||||
|
||||
@router.api_route('/queue', methods=['GET', 'POST'])
|
||||
@router.api_route('/api/queue', methods=['GET', 'POST'])
|
||||
async def queue(request: Request):
|
||||
"""实时排队状态(排队人数 + 预计等待时间)。"""
|
||||
batch_sem, dl_sem = _semaphores()
|
||||
@@ -106,7 +106,7 @@ async def queue(request: Request):
|
||||
}, '获取排队状态成功')
|
||||
|
||||
|
||||
@router.api_route('/batch_progress', methods=['GET', 'POST'])
|
||||
@router.api_route('/api/batch_progress', methods=['GET', 'POST'])
|
||||
async def batch_progress(user: LoginUser, request: Request):
|
||||
"""下载任务进度(已处理 X/Y + 百分比 + 预计剩余时间)。"""
|
||||
data = await _request_data(request)
|
||||
@@ -152,7 +152,7 @@ async def batch_progress(user: LoginUser, request: Request):
|
||||
}, '获取任务进度成功')
|
||||
|
||||
|
||||
@router.post('/task/cancel')
|
||||
@router.post('/api/task/cancel')
|
||||
async def task_cancel(user: LoginUser, request: Request):
|
||||
"""取消下载任务(仅任务本人的站点账号可取消)。"""
|
||||
data = await _request_data(request)
|
||||
@@ -174,7 +174,7 @@ async def task_cancel(user: LoginUser, request: Request):
|
||||
return success({'task_id': task_id, 'status': 'canceled'}, '已请求取消')
|
||||
|
||||
|
||||
@router.api_route('/task/heartbeat', methods=['GET', 'POST'])
|
||||
@router.api_route('/api/task/heartbeat', methods=['GET', 'POST'])
|
||||
async def task_heartbeat(user: LoginUser, request: Request):
|
||||
"""设备心跳:保持任务活跃;暂停中的任务自动恢复(重新进入排队)。"""
|
||||
await ratelimit.guard(request, bucket='hb', limit=60, window=60)
|
||||
@@ -201,7 +201,7 @@ async def task_heartbeat(user: LoginUser, request: Request):
|
||||
return success({'resumed': resumed, 'online': True}, '心跳成功')
|
||||
|
||||
|
||||
@router.api_route('/task/list', methods=['GET', 'POST'])
|
||||
@router.api_route('/api/task/list', methods=['GET', 'POST'])
|
||||
async def task_list(user: LoginUser, request: Request):
|
||||
"""本设备未结束的任务列表(重新打开网站时恢复任务悬浮窗)。"""
|
||||
data = await _request_data(request)
|
||||
|
||||
Reference in new issue
Block a user