- 使用 hasattr 检查是否为枚举类型,兼容字符串和枚举 - 移除 get_tasks 中多余的 get_task_detail 调用,使用已加载的关联数据
This commit is contained in:
@@ -43,13 +43,20 @@ async def create_task(
|
|||||||
|
|
||||||
# 构建响应
|
# 构建响应
|
||||||
courses = [link.course.name for link in task.course_links]
|
courses = [link.course.name for link in task.course_links]
|
||||||
|
# 安全获取枚举值(兼容字符串和枚举类型)
|
||||||
|
priority_val = task.priority.value if hasattr(task.priority, 'value') else task.priority
|
||||||
|
status_val = task.status.value if hasattr(task.status, 'value') else task.status
|
||||||
|
completed_count = sum(
|
||||||
|
1 for a in task.assignments
|
||||||
|
if (a.status.value if hasattr(a.status, 'value') else a.status) == "completed"
|
||||||
|
)
|
||||||
return ResponseModel(
|
return ResponseModel(
|
||||||
data=TaskResponse(
|
data=TaskResponse(
|
||||||
id=task.id,
|
id=task.id,
|
||||||
title=task.title,
|
title=task.title,
|
||||||
description=task.description,
|
description=task.description,
|
||||||
priority=task.priority.value,
|
priority=priority_val,
|
||||||
status=task.status.value,
|
status=status_val,
|
||||||
creator_id=task.creator_id,
|
creator_id=task.creator_id,
|
||||||
deadline=task.deadline,
|
deadline=task.deadline,
|
||||||
requirements=task.requirements,
|
requirements=task.requirements,
|
||||||
@@ -58,7 +65,7 @@ async def create_task(
|
|||||||
updated_at=task.updated_at,
|
updated_at=task.updated_at,
|
||||||
courses=courses,
|
courses=courses,
|
||||||
assigned_count=len(task.assignments),
|
assigned_count=len(task.assignments),
|
||||||
completed_count=sum(1 for a in task.assignments if a.status.value == "completed")
|
completed_count=completed_count
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -77,16 +84,23 @@ async def get_tasks(
|
|||||||
# 构建响应
|
# 构建响应
|
||||||
items = []
|
items = []
|
||||||
for task in tasks:
|
for task in tasks:
|
||||||
# 加载关联数据
|
# 安全获取枚举值
|
||||||
task_detail = await task_service.get_task_detail(db, task.id)
|
priority_val = task.priority.value if hasattr(task.priority, 'value') else task.priority
|
||||||
if task_detail:
|
status_val = task.status.value if hasattr(task.status, 'value') else task.status
|
||||||
courses = [link.course.name for link in task_detail.course_links]
|
|
||||||
|
# 使用已加载的关联数据(通过 selectinload)
|
||||||
|
courses = [link.course.name for link in task.course_links] if task.course_links else []
|
||||||
|
completed_count = sum(
|
||||||
|
1 for a in task.assignments
|
||||||
|
if (a.status.value if hasattr(a.status, 'value') else a.status) == "completed"
|
||||||
|
) if task.assignments else 0
|
||||||
|
|
||||||
items.append(TaskResponse(
|
items.append(TaskResponse(
|
||||||
id=task.id,
|
id=task.id,
|
||||||
title=task.title,
|
title=task.title,
|
||||||
description=task.description,
|
description=task.description,
|
||||||
priority=task.priority.value,
|
priority=priority_val,
|
||||||
status=task.status.value,
|
status=status_val,
|
||||||
creator_id=task.creator_id,
|
creator_id=task.creator_id,
|
||||||
deadline=task.deadline,
|
deadline=task.deadline,
|
||||||
requirements=task.requirements,
|
requirements=task.requirements,
|
||||||
@@ -94,8 +108,8 @@ async def get_tasks(
|
|||||||
created_at=task.created_at,
|
created_at=task.created_at,
|
||||||
updated_at=task.updated_at,
|
updated_at=task.updated_at,
|
||||||
courses=courses,
|
courses=courses,
|
||||||
assigned_count=len(task_detail.assignments),
|
assigned_count=len(task.assignments) if task.assignments else 0,
|
||||||
completed_count=sum(1 for a in task_detail.assignments if a.status.value == "completed")
|
completed_count=completed_count
|
||||||
))
|
))
|
||||||
|
|
||||||
return ResponseModel(
|
return ResponseModel(
|
||||||
|
|||||||
Reference in New Issue
Block a user