创建新的历史记录 初始状态为 draft(草稿),表示大纲已创建但尚未开始生成图片。 Args: topic: 绘本主题/标题 outline: 大纲内容,包含 pages 数组等信息 task_id: 关联的生成任务 ID(可选) Returns: str: 新创建的记录 ID(UUID 格式) 状态流转: 新建 -> draft(草稿状态)
(
self,
topic: str,
outline: Dict,
task_id: Optional[str] = None
)
| 92 | return os.path.join(self.history_dir, f"{record_id}.json") |
| 93 | |
| 94 | def create_record( |
| 95 | self, |
| 96 | topic: str, |
| 97 | outline: Dict, |
| 98 | task_id: Optional[str] = None |
| 99 | ) -> str: |
| 100 | """ |
| 101 | 创建新的历史记录 |
| 102 | |
| 103 | 初始状态为 draft(草稿),表示大纲已创建但尚未开始生成图片。 |
| 104 | |
| 105 | Args: |
| 106 | topic: 绘本主题/标题 |
| 107 | outline: 大纲内容,包含 pages 数组等信息 |
| 108 | task_id: 关联的生成任务 ID(可选) |
| 109 | |
| 110 | Returns: |
| 111 | str: 新创建的记录 ID(UUID 格式) |
| 112 | |
| 113 | 状态流转: |
| 114 | 新建 -> draft(草稿状态) |
| 115 | """ |
| 116 | # 生成唯一记录 ID |
| 117 | record_id = str(uuid.uuid4()) |
| 118 | now = datetime.now().isoformat() |
| 119 | |
| 120 | # 创建完整的记录对象 |
| 121 | record = { |
| 122 | "id": record_id, |
| 123 | "title": topic, |
| 124 | "created_at": now, |
| 125 | "updated_at": now, |
| 126 | "outline": outline, # 保存完整的大纲数据 |
| 127 | "images": { |
| 128 | "task_id": task_id, |
| 129 | "generated": [] # 初始无生成图片 |
| 130 | }, |
| 131 | "status": RecordStatus.DRAFT, # 初始状态:草稿 |
| 132 | "thumbnail": None # 初始无缩略图 |
| 133 | } |
| 134 | |
| 135 | # 保存完整记录到独立文件 |
| 136 | record_path = self._get_record_path(record_id) |
| 137 | with open(record_path, "w", encoding="utf-8") as f: |
| 138 | json.dump(record, f, ensure_ascii=False, indent=2) |
| 139 | |
| 140 | # 更新索引(用于快速列表查询) |
| 141 | index = self._load_index() |
| 142 | index["records"].insert(0, { |
| 143 | "id": record_id, |
| 144 | "title": topic, |
| 145 | "created_at": now, |
| 146 | "updated_at": now, |
| 147 | "status": RecordStatus.DRAFT, # 索引中也记录状态 |
| 148 | "thumbnail": None, |
| 149 | "page_count": len(outline.get("pages", [])), # 预期页数 |
| 150 | "task_id": task_id |
| 151 | }) |