kin: KIN-UI-023-backend_dev
This commit is contained in:
parent
2c08cc7ed5
commit
41b711a478
1 changed files with 15 additions and 6 deletions
|
|
@ -290,13 +290,11 @@ def has_open_children(conn: sqlite3.Connection, task_id: str, visited: set[str]
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
def _check_parent_completion(conn: sqlite3.Connection, task_id: str, visited: set[str] | None = None) -> None:
|
def _do_cascade(conn: sqlite3.Connection, task_id: str, visited: set[str]) -> None:
|
||||||
"""Cascade-check upward: if parent is 'revising' and all children closed → promote to 'done'."""
|
"""Recursive upward cascade without transaction management — no commits."""
|
||||||
if visited is None:
|
|
||||||
visited = set()
|
|
||||||
if task_id in visited:
|
if task_id in visited:
|
||||||
return
|
return
|
||||||
visited = visited | {task_id}
|
visited.add(task_id)
|
||||||
task = get_task(conn, task_id)
|
task = get_task(conn, task_id)
|
||||||
if not task:
|
if not task:
|
||||||
return
|
return
|
||||||
|
|
@ -314,8 +312,19 @@ def _check_parent_completion(conn: sqlite3.Connection, task_id: str, visited: se
|
||||||
"UPDATE tasks SET status = 'done', completed_at = ?, updated_at = ? WHERE id = ?",
|
"UPDATE tasks SET status = 'done', completed_at = ?, updated_at = ? WHERE id = ?",
|
||||||
(now, now, parent_id),
|
(now, now, parent_id),
|
||||||
)
|
)
|
||||||
|
_do_cascade(conn, parent_id, visited)
|
||||||
|
|
||||||
|
|
||||||
|
def _check_parent_completion(conn: sqlite3.Connection, task_id: str, visited: set[str] | None = None) -> None:
|
||||||
|
"""Cascade-check upward: promote all ready parents to 'done' in one atomic transaction."""
|
||||||
|
if visited is None:
|
||||||
|
visited = set()
|
||||||
|
try:
|
||||||
|
_do_cascade(conn, task_id, visited)
|
||||||
conn.commit()
|
conn.commit()
|
||||||
_check_parent_completion(conn, parent_id, visited)
|
except Exception:
|
||||||
|
conn.rollback()
|
||||||
|
raise
|
||||||
|
|
||||||
|
|
||||||
VALID_TASK_SORT_FIELDS = frozenset({
|
VALID_TASK_SORT_FIELDS = frozenset({
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue