fix: reset subtasks for recurring tasks
This commit is contained in:
@@ -640,6 +640,7 @@ async def update_task(
|
||||
data = payload.model_dump(exclude_unset=True)
|
||||
expected_version = data.pop("version")
|
||||
recurrence = None
|
||||
reset_subtasks = False
|
||||
if data.get("completed") is True:
|
||||
recurrence = await db.scalar(select(RecurrenceTemplate).where(
|
||||
RecurrenceTemplate.task_id == task_id, RecurrenceTemplate.user_id == user.id
|
||||
@@ -656,6 +657,7 @@ async def update_task(
|
||||
data["completed"] = False
|
||||
data["due_at"] = next_items[0]
|
||||
recurrence.starts_at = next_items[0]
|
||||
reset_subtasks = True
|
||||
if "list_id" in data:
|
||||
await _owned_list(db, user.id, data["list_id"])
|
||||
if task.parent_id:
|
||||
@@ -685,6 +687,18 @@ async def update_task(
|
||||
if exists_id:
|
||||
raise HTTPException(status_code=409, detail="任务已被更新,请刷新后重试")
|
||||
raise HTTPException(status_code=404, detail="任务不存在")
|
||||
if reset_subtasks:
|
||||
reset_at = utcnow()
|
||||
await db.execute(
|
||||
update(Task)
|
||||
.where(
|
||||
Task.parent_id == task.id,
|
||||
Task.user_id == user.id,
|
||||
Task.deleted_at.is_(None),
|
||||
Task.completed.is_(True),
|
||||
)
|
||||
.values(completed=False, version=Task.version + 1, updated_at=reset_at)
|
||||
)
|
||||
if "list_id" in data and task.parent_id is None:
|
||||
await db.execute(
|
||||
update(Task)
|
||||
|
||||
Reference in New Issue
Block a user