Lighthouse 技术栈对照实现任务拆解(基于现有 Vue + Axum + SQLite)
本任务拆解以当前 Lighthouse 结构为基准:
- 后端:Rust + Axum + SQLx + SQLite + JWT + OpenAPI(utoipa)
- 前端:Vue 3 + Vite + TypeScript + Pinia + UnoCSS + ECharts
- 目录约定:
backend/src/{handlers,services,models,routes.rs}、frontend/src/{api,stores,views}
A. 后端实现任务(Axum/Rust)
A1. 基础工程与模块骨架
- 补齐
backend/src/routes.rs:按模块注册路由(echo、media、settings、auth、connect、inbox、todo、fediverse、dashboard、webhook、backup)。 - 统一错误响应与结果包装(对齐现有
backend/src/error.rs风格)。 - JWT 中间件(Bearer token + public route 例外)。
- OpenAPI 文档注解:为新增模块补充 utoipa 注解。
A2. 数据库与模型(SQLx + Migration)
- 新增迁移文件(SQLite):
users,oauth_bindings,passkeys,access_tokensechos,images,tags,echo_tagstodos,connects,inboxkey_values,temp_fileswebhooks,dead_lettersfollows,followers,inbox_statuses
- 在
backend/src/models/建模(serde + sqlx FromRow)。 - 统一时间字段(UTC + chrono)。
- 关键索引/唯一约束(tag.name, passkeys.credential_id, echo_tags(echo_id,tag_id))。
A3. Auth 与用户模块
-
POST /api/auth/login:用户登录(JWT)。 -
POST /api/auth/register:用户注册(可控开关)。 -
GET /api/users/me:当前用户信息。 -
PATCH /api/users/me:更新用户信息。 -
DELETE /api/users/:id:删除用户(管理员)。 - 角色/权限模型:admin 与普通用户。
- OAuth2/OIDC 绑定流程(如需,先建表与接口骨架)。
- Passkey(WebAuthn)流程(后期里程碑可延后)。
A4. Echo 核心模块
- Echo CRUD:
POST /api/echoPATCH /api/echo/:idDELETE /api/echo/:idGET /api/echo/:idGET /api/echo/page(分页)GET /api/echo/today
- Echo 结构校验:内容/图片/扩展卡片至少一项。
- 布局枚举约束(waterfall/grid/horizontal/carousel)。
- 标签绑定与使用计数(事务内处理)。
- 点赞接口:
PUT /api/echo/:id/like
A5. 媒体与存储模块
- 图片上传/删除(multipart + 本地存储)。
- 音频上传/删除(multipart + 本地存储)。
- S3 预签名上传:
PUT /api/storage/s3/presign
- TempFile 回收任务(防止孤儿文件)。
A6. RSS 模块
- RSS/Atom 生成(feed-rs 或 rss crate)。
-
GET /rss输出 XML。 - 输出字段映射:标题、链接、作者、发布时间、内容摘要。
A7. Connect 模块
- Connect 表 CRUD:
POST /api/connectDELETE /api/connect/:id
- Connect 公共读取:
GET /api/connectGET /api/connect/listGET /api/connects/info
- 并发抓取 + 超时 + 重试策略(tokio + timeout)。
A8. Inbox 模块
- Inbox CRUD:
GET /api/inbox(分页+搜索)GET /api/inbox/unreadPUT /api/inbox/:id/readDELETE /api/inbox/:idDELETE /api/inbox
- Admin-only 权限。
A9. Todo 模块
- Todo CRUD:
GET /api/todoPOST /api/todoPUT /api/todo/:idDELETE /api/todo/:id
- 最大未完成数量限制(3)。
A10. Settings 模块
- System Setting(key_value 存 JSON):
GET /api/settingsPUT /api/settings
- Comment 设置、OAuth2 设置、S3 设置、Fediverse 设置:
GET/PUT /api/settings/{comment|oauth2|s3|fediverse}
- Agent 设置:
GET /api/agent/infoGET/PUT /api/agent/settings
- Backup Schedule:
GET /api/backup/schedulePOST /api/backup/schedule
- Access Tokens:
GET /api/access-tokensPOST /api/access-tokensDELETE /api/access-tokens/:id
A11. Webhook 与事件总线
- 事件总线(tokio broadcast 或 mpsc + dispatcher)。
- Webhook CRUD:
GET /api/webhooksPOST /api/webhooksPUT /api/webhooks/:idDELETE /api/webhooks/:id
- Webhook 重试 + 死信队列(dead_letters 表)。
- 事件触发点:Echo 创建/更新/删除、备份、用户变更。
A12. Fediverse / ActivityPub
- WebFinger:
/.well-known/webfinger - Actor:
/users/:username - Inbox:
/users/:username/inbox - Outbox:
/users/:username/outbox - Followers/Following:
/users/:username/followers、/users/:username/following - Object:
/objects/:id - Activity/Actor/Object 转换(Echo → AS2)。
- HTTP Signature 验签与签名。
A13. Dashboard 指标
- 系统指标采集(sysinfo crate)。
-
GET /api/dashboard/metrics -
GET /ws/dashboard/metrics(WebSocket 推送)。
A14. Agent(LLM)
- 近期活动摘要:
GET /api/agent/recent
- Provider 抽象与实现(OpenAI/DeepSeek/Anthropic/Gemini/本地)。
- 缓存(key_value)。
A15. 备份与恢复
- 数据库与资产文件压缩备份(zip)。
-
GET /api/backup -
GET /api/backup/export?token=... -
POST /api/backup/import - 定时备份任务(cron)。
B. 前端实现任务(Vue 3 + Pinia)
B1. API Client
-
frontend/src/api/新增模块:echo.ts,media.ts,settings.ts,auth.ts,connect.tsinbox.ts,todo.ts,fediverse.ts,dashboard.ts,webhook.ts,backup.ts
- 统一错误处理与 token 注入(复用
frontend/src/api/client.ts)。
B2. Store 模块
-
stores/echo.ts:echo 列表/详情/分页。 -
stores/settings.ts:系统设置/存储设置/联邦设置。 -
stores/auth.ts:登录态、token、用户信息。 -
stores/connect.ts:connect 列表与 info。 -
stores/inbox.ts:收件箱、未读、分页。 -
stores/dashboard.ts:指标数据与 ws 订阅。
B3. 视图与组件对齐
- Home/Editor:Echo 发布与列表(复用
views/Home.vue/views/Editor.vue)。 - Upload:媒体上传(复用
views/Upload.vue)。 - Charts:指标展示(复用
views/Charts.vue)。 - Panel:设置中心(新增系统/存储/联邦/备份/Webhook/AccessToken)。
- Connect/Hub:跨实例列表与概览。
- Inbox/Todo:管理页(列表 + 操作)。
B4. 路由与权限
- 路由元信息标记需要登录/管理员。
- 未登录引导与错误页面(
views/NotFound.vue已存在)。
C. 工程与运维
C1. 配置与环境变量
-
backend/env.example增补新模块配置。 - 前端
.env增补 API Base URL。
C2. 测试
- 单元测试:service 层与 repository 层。
- 集成测试:Echo CRUD、RSS、上传、Webhooks。
- ActivityPub 互操作测试(最小化用例)。
C3. 部署
- Dockerfile + docker-compose(SQLite 卷 + assets)。
- 生产环境使用 PostgreSQL(可选后续)。
D. 里程碑建议
- M1:Echo + Auth + RSS + 基础设置
- M2:Media + Inbox + Todo + Dashboard
- M3:Webhook + Backup + Connect
- M4:Fediverse + Agent + 高级设置