修复前后端显示异常问题(受试者、中心、负责人、日期等)
This commit is contained in:
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user