Files
EveryPublish/docs/reference-system-logic-diagrams.md
T

100 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 参考系统逻辑图
本文只描述两个参考仓库的实际代码路径,不把它们的缺陷当作 EveryPublish 设计。许可证:两个仓库均为 MIT;本文件和当前实现只借鉴领域逻辑,不复制无鉴权路由、明文 Cookie 或平台选择器。
## MediaPublishPlatform
```text
Vue AccountManagement
│ GET /login?type&id
▼
Flask sau_backend.py
│ Queue + daemon thread
▼
login.py / unified_login_cookie_gen
│ Playwright headed Chrome
│ frame URL 离开 login 即判成功
▼
cookiesFile/<platform>_cookie_<id>.json
│ DB user_info(status=1)
└─ SSE: Cookie已保存 -> 登录成功 -> 前端关闭
Vue MaterialManagement ── POST /uploadSave ──> videoFile + file_records
│
└─ POST /postVideo
│ task_id
├─ 为 file × account 写 publish_task_records(发布中)
├─ synchronous post_file
│ └─ file → account → Playwright BaseFileUploader
└─ 统一把整个 task_id 改成功/失败
Vue 多平台发布 ── POST /postVideosToMultiplePlatforms
│
└─ file × platform × account 串行尝试
├─ 某账号成功后切换下一文件
└─ 按 platform success>0 粗粒度更新整批记录
```
关键原文位置:登录 `sau_backend.py:360-413`、`myUtils/login.py:31-160`;素材 `sau_backend.py:93-192`;单平台发布 `sau_backend.py:1155-1315`;批量发布 `sau_backend.py:1318-1504`;统一上传 `newFileUpload/baseFileUploader.py:145-280`、`multiFileUploader.py:7-74,154-239`;状态表 `db/createTable.py:37-51`。
## social-auto-upload-web-ui
```text
Vue AccountManagement
│ GET /login
▼
Flask app.sse_stream
│ Queue + platform.login
├─ QR/文本消息(不同平台格式不统一)
├─ storage_state / Cookie 保存
└─ 终态 200/500/error 后关闭 SSE
Vue AccountManagement ── POST /importAccount
▼
BasePlatform.import_cookie
├─ step1 解析 Cookie
├─ step2 写临时 Cookie 文件
├─ step3 sync_profile / stats
└─ step4 写 user_info(status=1) + done
Vue PublishCenter ── POST /postVideo
│ 参数校验、素材 probe、平台配置合并
▼
publish_executor 单 worker
├─ queued
├─ running -> platform.publish
└─ success/failed(内存 TTL 2h/200 条)
│ GET /postVideo/status/<task_id>
└─ SQLite publish_batches/publish_details 保存历史
Vue TaskCenter ── /api/v2/tasks
▼
TaskQueue(默认 2 workers)
pending -> queued -> running -> success/failed/cancelled
└─ /api/v2/tasks/stream SSE + heartbeat
Vue Material/Draft
├─ /api/materials/upload(1MB 流式写盘 + 异步 probe)
├─ /api/uploads/init -> chunk -> merge(可续传)
└─ /api/v2/drafts/batch-publish(每 draft × account 入队)
```
关键原文位置:SSE 登录 `backend/app.py:83-105,672-708`;Cookie 导入 `backend/app.py:719-847`、`backend/impl/base_platform.py:188-355`;视频异步队列 `backend/app.py:961-1154`、`backend/services/publish_executor.py:1-170`;v2 队列 `backend/ext_api/__init__.py:170-348`、`backend/ext_api/task_queue.py:28-55,161-330`;素材和分片 `backend/blueprints/materials_bp.py:155-497`、`backend/blueprints/uploads_bp.py:100-430`。
## 迁移到 EveryPublish
```text
参考平台 Registry / BaseUploader
-> Go platform.Adapter + Registry + 每平台 HTTP/Playwright 实现
参考 Queue/SSE
-> MySQL Task/TaskEvent + Browser WS + REST 刷新
参考 Cookie storage_state
-> workspace/account AES-256-GCM credentials.Store
参考 file × account 明细
-> Task accountIds + 逐 adapter 结果聚合,部分成功明确失败原因
参考分片上传
-> B站 adapter UPOS;素材源仍使用一次性签名直链
```
保留的差异:EveryPublish 要求 JWT、workspace 隔离、角色权限、审计、取消 context 和持久化状态;真实扫码不能用 URL 变化或 mock URL 直接判定成功。