修复前后端显示异常问题(受试者、中心、负责人、日期等)

This commit is contained in:
Cheng Zhou
2025-12-18 22:09:28 +08:00
parent fb4950f8f7
commit 7137665410
48 changed files with 764 additions and 156 deletions
+27 -4
View File
@@ -6,7 +6,9 @@ from sqlalchemy.ext.asyncio import AsyncSession
from app.core.deps import get_db_session, require_study_member, require_study_roles
from app.crud import member as member_crud
from app.crud import study as study_crud
from app.schemas.member import StudyMemberCreate, StudyMemberRead, StudyMemberUpdate
from app.crud import user as user_crud
from app.schemas.member import StudyMemberCreate, StudyMemberRead, StudyMemberReadWithUser, StudyMemberUpdate
from app.schemas.user import UserDisplay
router = APIRouter()
@@ -39,7 +41,7 @@ async def add_member(
@router.get(
"/",
response_model=list[StudyMemberRead],
response_model=list[StudyMemberReadWithUser],
dependencies=[Depends(require_study_member())],
)
async def list_members(
@@ -47,10 +49,31 @@ async def list_members(
skip: int = 0,
limit: int = 100,
db: AsyncSession = Depends(get_db_session),
) -> list[StudyMemberRead]:
) -> list[StudyMemberReadWithUser]:
await _ensure_study_exists(db, study_id)
members = await member_crud.list_members(db, study_id, skip=skip, limit=limit)
return list(members)
user_ids = {m.user_id for m in members}
users_map = await user_crud.get_users_by_ids(db, user_ids)
result: list[StudyMemberReadWithUser] = []
for m in members:
# 仅返回项目内启用的成员 + 账号启用的用户
if not m.is_active:
continue
user = users_map.get(m.user_id)
if not user or not user.is_active:
continue
result.append(
StudyMemberReadWithUser(
id=m.id,
study_id=m.study_id,
user_id=m.user_id,
role_in_study=m.role_in_study,
is_active=m.is_active,
added_at=m.added_at,
user=UserDisplay.model_validate(user) if user else None,
)
)
return result
@router.patch(