Fix MissingGreenlet on subtask serialization

Chain second-level selectinload(ProjectTask.subtasks) on task create, update,
and list endpoints. Pydantic's recursive ProjectTaskResponse schema accesses
.subtasks on each subtask, which triggers lazy loading without eager load.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Kyle 2026-02-16 01:39:41 +08:00
parent ccfbf6df96
commit 81edf81d13

View File

@ -128,7 +128,7 @@ async def get_project_tasks(
query = ( query = (
select(ProjectTask) select(ProjectTask)
.options(selectinload(ProjectTask.subtasks)) .options(selectinload(ProjectTask.subtasks).selectinload(ProjectTask.subtasks))
.where( .where(
ProjectTask.project_id == project_id, ProjectTask.project_id == project_id,
ProjectTask.parent_task_id.is_(None), ProjectTask.parent_task_id.is_(None),
@ -180,7 +180,7 @@ async def create_project_task(
# Re-fetch with subtasks loaded # Re-fetch with subtasks loaded
query = ( query = (
select(ProjectTask) select(ProjectTask)
.options(selectinload(ProjectTask.subtasks)) .options(selectinload(ProjectTask.subtasks).selectinload(ProjectTask.subtasks))
.where(ProjectTask.id == new_task.id) .where(ProjectTask.id == new_task.id)
) )
result = await db.execute(query) result = await db.execute(query)
@ -217,7 +217,7 @@ async def update_project_task(
# Re-fetch with subtasks loaded # Re-fetch with subtasks loaded
query = ( query = (
select(ProjectTask) select(ProjectTask)
.options(selectinload(ProjectTask.subtasks)) .options(selectinload(ProjectTask.subtasks).selectinload(ProjectTask.subtasks))
.where(ProjectTask.id == task_id) .where(ProjectTask.id == task_id)
) )
result = await db.execute(query) result = await db.execute(query)