Fix MissingGreenlet in invite_members and assign_users_to_task

Both endpoints accessed ORM object IDs after db.commit(), which
expires all loaded objects in async SQLAlchemy. Added db.flush()
before commit to assign IDs while objects are still live.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Kyle 2026-03-17 03:49:28 +08:00
parent a7e93aa2a3
commit f0850ad3bf

View File

@ -600,13 +600,13 @@ async def invite_members(
source_type="project_member", source_type="project_member",
) )
await db.flush() # Assign IDs before commit (ORM objects expire after commit)
member_ids = [m.id for m in created_members]
await db.commit() await db.commit()
# Re-fetch with relationships # Re-fetch with relationships
if not created_members: if not created_members:
return [] return []
member_ids = [m.id for m in created_members]
result = await db.execute( result = await db.execute(
select(ProjectMember) select(ProjectMember)
.options( .options(
@ -876,13 +876,14 @@ async def assign_users_to_task(
source_type="task_assignment", source_type="task_assignment",
) )
await db.flush() # Assign IDs before commit (ORM objects expire after commit)
assignment_ids = [a.id for a in created]
await db.commit() await db.commit()
if not created: if not created:
return [] return []
# Re-fetch with user info # Re-fetch with user info
assignment_ids = [a.id for a in created]
result = await db.execute( result = await db.execute(
select(ProjectTaskAssignment) select(ProjectTaskAssignment)
.options(selectinload(ProjectTaskAssignment.user)) .options(selectinload(ProjectTaskAssignment.user))