feat(backend): implement task creation and admin web

This commit is contained in:
QiuSW
2026-07-26 14:03:32 +08:00
parent 2b265c92fc
commit c5d3b215ff
58 changed files with 8773 additions and 83 deletions
+12 -3
View File
@@ -69,8 +69,14 @@ Authorization、Cookie 或 panic 内容。
SQLite 默认文件为被忽略的 `backend-api/var/cmroubao.db`,连接启用 foreign keys、
5 秒 busy timeout、WAL 和 immediate transaction,并限制单连接以匹配单进程 MVP。
数据库由 `cmd` 显式打开和关闭,不存在包级单例。Goose SQL 通过 `embed.FS` 加载,
`cmd/migrate` 显式执行 `up/down/status`;T-201 只验证迁移链路,业务表由后续任务
按 API 和领域模型建立。
`cmd/migrate` 显式执行 `up/down/status`。API 启动前检查所有迁移均已应用,不在
服务进程内自动改表;T-203 已用 `00002_tasks_and_assets.sql` 建立任务、资产、事件
和幂等记录表。
T-204 管理会话完成前,T-203 的业务路由只允许 loopback 来源,Web 写操作还校验
浏览器 Cookie 与表单字段的随机双提交 CSRF token;这不是正式登录,不能据此开放
局域网监听。模板/API handler 仍调用同一 usecase,T-204 只替换主体和会话门禁,
不重写业务规则。
### 2.2 Android App
@@ -350,9 +356,10 @@ IDLE
| `id` | PK | 任务 ID |
| `title` | NOT NULL | 原始标题 |
| `description` | NOT NULL | 原始说明,可为空字符串 |
| `sku` | NOT NULL | 原始 SKU,不得由模型改写 |
| `image_asset_id` | FK, NOT NULL | 原始参考图 |
| `quantity` | `> 0` | 权威数量 |
| `max_budget` | `> 0`, nullable | 权威最高预算,币种为 CNY |
| `max_budget` | `> 0`, nullable | 全部数量的权威最高商品总预算,币种为 CNY |
| `status` | NOT NULL | 任务状态枚举 |
| `created_by` | FK | 创建人 |
| `claimed_by_device_id` | FK, nullable | 当前设备 |
@@ -380,6 +387,8 @@ IDLE
- `execution_events` 只追加,记录 step、事件类型、可读消息和时间;不保存密码或 token。
- `assets` 保存文件相对路径、媒体类型、大小、哈希、创建者和保留时间。
- 原图和截图必须通过鉴权接口读取,文件名不能直接作为公开 URL。
- 任务参考图上传可接受 JPEG/PNG/WebP,但后端必须先真实解码、限制字节与像素,再
统一规范化为匿名 JPEG;未来 Android 读取的资产不能依赖原始扩展名或声明 MIME。
## 六、API 和并发边界