Files
cmshoppe/docs/tasks/T-586.md
T

48 lines
3.9 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.
---
id: T-586
title: AI工场数据地基:项目、图片资产、异步任务与终选顺序 SQLite 模型
phase: 7
deps: [T-538]
status: DONE
created: 2026-07-11
---
## 问题 / 背景
⑥ AI工场需要同时管理多个账号/商品、蝦皮原图、迭代生成图、多个在途 cmhub task、主图/详情图终选顺序和重启续查。只靠 `data/images/pool/<slug>/<item_id>/` 文件名无法可靠恢复来源、任务状态和排序,因此采用“SQLite 保存状态事实、目录保存图片字节”。完整产品口径见 Obsidian《图片精修-主图详情图生成方案》和 `docs/ui/tab6-ai-studio-v3.svg`。
## 方案
- `app/db.py` 增加 ad-hoc 兼容迁移和数据对象:
- `image_studio_projects`:账号、商品 ID、目标主图数/详情数、草稿提示词、项目状态、软删除/时间字段;同一账号+商品唯一。
- `image_studio_assets`:项目、类别(原图/生成主图/生成详情图)、远程 URL、本地路径、比例、父资产、生成提示词、可用/缺失状态。
- `image_studio_jobs`:资产候选、生成来源、task key/id、Provider、类型、状态、错误、重试和时间字段;当前阶段 `provider` 固定为 `cmhub`,字段仅用于状态自描述和后续兼容。
- `image_studio_selections`:项目、`main/detail`、连续 position、asset;类别+位置唯一,同一资产在同类别唯一。
- 新增独立 service 模块(命名按实现确定)封装 CRUD、事务排序、路径计算和状态转换,GUI 不直接写 SQL。
- 图片目录固定在 `data/images/pool/<slug>/<item_id>/{originals,generated,exports}/`,所有路径继续通过 `appconfig` 从 `data/` 解析。
- 数据写入顺序保证崩溃可恢复:先建 job/key,submit 后立即写 task_id,图片完整落盘后才创建/启用 asset。
## 验收要点
- 历史 DB 启动可自动补表/索引且不影响既有 tasks/batches/accounts。
- 同账号+商品重复创建返回已有项目;不同账号可绑定不同商品项目。
- 资产来源、父资产、比例和本地路径可完整读回;文件缺失可标记但不物理删记录。
- job 支持 `pending/submitted/running/succeeded/failed` 及 task key/id 生命周期,重启后可列出待续查任务。
- 终选位置连续、并发写入事务安全、同资产同类别不重复;允许同资产各出现一次 main/detail。
- 纯逻辑测试覆盖迁移、唯一约束、CRUD、状态转换、排序和路径隔离;运行全量 unittest、ruff、compileall、`git diff --check`。
## 边界(不改什么)
- 不做 GUI、CDP、网络下载、AI 请求、导出或蝦皮写操作。
- 不实现自定义 Provider、API Key 或生成来源切换。
- 不把图片 BLOB 写 SQLite,不采用目录扫描猜状态。
- 不提供本地图片导入,不物理删除项目历史。
## 执行记录
- 2026-07-11:完成 AI工场 SQLite 数据地基。
- `app/db.py` 增加 `image_studio_projects`、`image_studio_assets`、`image_studio_jobs`、`image_studio_selections` 四张表与索引;沿用现有 `CREATE TABLE IF NOT EXISTS` ad-hoc 迁移风格,历史 DB 启动时自动补表,不影响 `batches/accounts/tasks`。
- 新增 `app/image_studio.py` service 层,封装项目创建/软删除恢复、图片目录计算、资产 CRUD、cmhub job task key/task_id 生命周期、可续查任务列表、主图/详情图终选排序替换;校验 job/终选引用的资产必须属于同一项目。
- 新增 `tests/test_image_studio.py` 覆盖 schema 初始化、项目唯一性、软删除恢复、路径隔离、资产父子关系、任务状态转换、续查查询、终选连续排序与错误路径。
- 验证:在只套用 T-586 diff 的 clean worktree 中运行 `python -m ruff check app tests main.py`、`py -3.10 -m compileall app main.py`、`py -3.10 -m unittest discover -s tests`(343 tests)和 `git diff --check`,全部通过。