feat(ai): mark cover reset history in generate table

This commit is contained in:
chengma
2026-07-11 12:06:17 +08:00
parent b71fa60b9e
commit 5c01377173
5 changed files with 280 additions and 4 deletions
+31 -1
View File
@@ -141,6 +141,8 @@ class Task:
new_cover_path: Optional[str]
image_task_id: Optional[str]
image_task_key: Optional[str]
cover_reset_count: int
cover_reset_at: Optional[str]
committed: int
stage: str
status: str
@@ -236,6 +238,8 @@ CREATE TABLE IF NOT EXISTS tasks (
new_cover_path TEXT,
image_task_id TEXT,
image_task_key TEXT,
cover_reset_count INTEGER NOT NULL DEFAULT 0,
cover_reset_at TEXT,
committed INTEGER NOT NULL DEFAULT 0,
stage TEXT NOT NULL DEFAULT 'imported',
status TEXT NOT NULL DEFAULT 'pending',
@@ -389,6 +393,7 @@ def init_db(path=None, conn=None) -> None:
database.executescript(SCHEMA_SQL)
_ensure_batch_delete_columns(database)
_ensure_task_image_task_columns(database)
_ensure_task_cover_reset_columns(database)
def _ensure_batch_delete_columns(database):
@@ -406,6 +411,14 @@ def _ensure_task_image_task_columns(database):
if "image_task_key" not in columns:
database.execute("ALTER TABLE tasks ADD COLUMN image_task_key TEXT")
def _ensure_task_cover_reset_columns(database):
columns = {row["name"] for row in database.execute("PRAGMA table_info(tasks)").fetchall()}
if "cover_reset_count" not in columns:
database.execute("ALTER TABLE tasks ADD COLUMN cover_reset_count INTEGER NOT NULL DEFAULT 0")
if "cover_reset_at" not in columns:
database.execute("ALTER TABLE tasks ADD COLUMN cover_reset_at TEXT")
def create_batch(file_paths: Iterable[str], note=None, path=None, conn=None) -> str:
batch_id = datetime.now().strftime("%Y%m%d_%H%M%S_") + uuid.uuid4().hex[:8]
files = [os.path.abspath(file_path) for file_path in file_paths]
@@ -969,6 +982,12 @@ def reset_generated(
new_cover = None if reset_cover else before.new_cover_path
image_task_id = None if reset_cover else before.image_task_id
image_task_key = None if reset_cover else before.image_task_key
should_record_cover_reset = bool(reset_cover and str(before.new_cover_path or "").strip())
cover_reset_count = int(before.cover_reset_count or 0)
cover_reset_at = before.cover_reset_at
if should_record_cover_reset:
cover_reset_count += 1
cover_reset_at = now
with database:
database.execute(
"""
@@ -977,13 +996,24 @@ def reset_generated(
new_cover_path = ?,
image_task_id = ?,
image_task_key = ?,
cover_reset_count = ?,
cover_reset_at = ?,
stage = 'generated',
status = 'success',
last_error = NULL,
updated_at = ?
WHERE id = ?
""",
(new_title, new_cover, image_task_id, image_task_key, now, int(task_id)),
(
new_title,
new_cover,
image_task_id,
image_task_key,
cover_reset_count,
cover_reset_at,
now,
int(task_id),
),
)
after = get_task(task_id, conn=database)
return {