协作台账:新表 huya_external_orders 替代 Excel 多人协同表(设计见
docs/设计-虎牙外部CK协作台账.md),一条 CK 一行,所有人共享、改动留痕。
- 前端 pages/HuyaCollabPage.tsx + 菜单「虎牙 → 外部单协作」/huya/collab:
内联编辑(带乐观锁 version)、图片缩略图、详情抽屉(字段表单 + 两个图片槽位 +
操作时间线)、粘贴导入弹窗(带 TSV 预览)、批量/单条验证 CK、页头统计条、筛选
- 两套状态机:业务 pending→bound→recharged→scripted→done(旁路 void)、
凭据 unverified/valid/invalid/disabled;唯一写入口在 services/huya_collab_service.py,
字段级审计 + 整数 version 乐观锁(不用 updated_at:DATETIME 只到秒)
- CK 只读探针 check_user_bind_game_account(真机判据:响应非 None 且 status == 200),
成功即覆盖写绑定快照 bind_game_account/bind_game_role/bind_game_channel(迁移 0056),
失败只改凭据状态、不动业务状态;人工只能停用/恢复(POST /{id}/ck/status)
- 贴/换/重建 CK、TSV 批量导入(SAVEPOINT 单行隔离,部分失败不整体失败)、
权限 huya:collab:view/edit/manage(删除只给运营)
- 孤儿图清理脚本 scripts/cleanup_orphan_file_assets.py(默认 --dry-run)
图片上传(协作台账截图用):OSS/本地双后端 + 缩略图变体 + /api/files 代理回读,
权限 file:upload / file:view。
验证:pytest 880 passed / 6 skipped;ruff format 全绿、ruff check 仅剩既有告警;
前端 tsc -b / eslint / vite build 通过;接口端到端冒烟 29 项全绿(TestClient,探针用假客户端);
探针真机冒烟 3 例(有效 CK=True、别人 uid=False、裸 cookie=False)。
59 lines
1.6 KiB
TOML
59 lines
1.6 KiB
TOML
[project]
|
|
name = "live-hub-py"
|
|
version = "0.4.0"
|
|
description = "直播账号运营 Web 后台"
|
|
readme = "README.md"
|
|
requires-python = ">=3.12,<3.13"
|
|
dependencies = [
|
|
"requests[socks]>=2.31.0",
|
|
"pycryptodome>=3.19.0",
|
|
"numpy>=1.24.0",
|
|
"opencv-python-headless>=4.8.0",
|
|
"Pillow>=10.0.0",
|
|
"loguru>=0.7.0",
|
|
"fastapi>=0.110.0",
|
|
"uvicorn[standard]>=0.27.0",
|
|
"sqlalchemy>=2.0.0",
|
|
"python-jose[cryptography]>=3.3.0",
|
|
"bcrypt>=4.0.0",
|
|
"pydantic>=2.0.0",
|
|
"python-multipart>=0.0.9",
|
|
"alembic>=1.18.4",
|
|
"websockets>=16.0",
|
|
"onnxruntime>=1.18.0",
|
|
"scipy>=1.13.0",
|
|
"pyexecjs>=1.5.1",
|
|
"pymysql>=1.1,<2",
|
|
# P0 订单读取适配层:连 order_site 的 PostgreSQL 只读库(规划 §6.5)。
|
|
# 全项目只有 external_order_source.py 一处跨库;URL 用 postgresql+psycopg://
|
|
"psycopg[binary]>=3.2,<4",
|
|
"curl-cffi>=0.13",
|
|
"segno>=1.6",
|
|
# 在线协作的图片上传:走 S3 兼容接口写阿里云 OSS(内网 endpoint)。
|
|
# 只在 STORAGE_MODE=oss 时才导入,本地开发/测试用本地目录后端,不装也能跑。
|
|
"boto3>=1.34",
|
|
]
|
|
|
|
[build-system]
|
|
requires = ["hatchling"]
|
|
build-backend = "hatchling.build"
|
|
|
|
[tool.hatch.build.targets.wheel]
|
|
packages = ["core", "utils", "web"]
|
|
|
|
[tool.pytest.ini_options]
|
|
testpaths = ["tests"]
|
|
|
|
[tool.ruff.lint.per-file-ignores]
|
|
# FastAPI evaluates dependency metadata in route parameter defaults by design.
|
|
"web/backend/**/*.py" = ["B008"]
|
|
# 虎牙路由共享层集中 re-export 依赖。
|
|
"web/backend/routers/huya/_common.py" = ["F401"]
|
|
|
|
[dependency-groups]
|
|
dev = [
|
|
"pyright>=1.1.411",
|
|
"pytest>=9.1.1",
|
|
"ruff>=0.12.0",
|
|
]
|