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

4.2 KiB
Raw Blame History

参考系统逻辑图

本文只描述两个参考仓库的实际代码路径,不把它们的缺陷当作 EveryPublish 设计。许可证:两个仓库均为 MIT;本文件和当前实现只借鉴领域逻辑,不复制无鉴权路由、明文 Cookie 或平台选择器。

MediaPublishPlatform

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

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

参考平台 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 直接判定成功。