参与者管理- PD模块内容补充

This commit is contained in:
Cheng Zhou
2026-02-28 14:33:57 +08:00
parent af0c1b4b7d
commit 9b36a42e6f
14 changed files with 855 additions and 35 deletions
+50
View File
@@ -0,0 +1,50 @@
import uuid
from fastapi import APIRouter, Depends, HTTPException, status
from sqlalchemy.ext.asyncio import AsyncSession
from app.core.deps import get_cra_site_scope, get_current_user, get_db_session, require_study_member
from app.crud import study as study_crud
from app.crud import subject_pd as subject_pd_crud
from app.schemas.subject_pd import SubjectPdSummaryRead
router = APIRouter()
async def _ensure_study_exists(db: AsyncSession, study_id: uuid.UUID):
study = await study_crud.get(db, study_id)
if not study:
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="项目不存在")
return study
@router.get(
"/subject-pds",
response_model=list[SubjectPdSummaryRead],
dependencies=[Depends(require_study_member())],
)
async def list_study_subject_pds(
study_id: uuid.UUID,
skip: int = 0,
limit: int = 500,
db: AsyncSession = Depends(get_db_session),
current_user=Depends(get_current_user),
) -> list[SubjectPdSummaryRead]:
await _ensure_study_exists(db, study_id)
cra_scope = await get_cra_site_scope(db, study_id, current_user)
site_ids = cra_scope[0] if cra_scope else None
rows = await subject_pd_crud.list_study_subject_pds(db, study_id, skip=skip, limit=limit, site_ids=site_ids)
return [
SubjectPdSummaryRead(
id=item.id,
study_id=item.study_id,
subject_id=item.subject_id,
subject_no=subject_no,
site_id=site_id,
pd_no=item.pd_no,
status=item.status,
description=item.description,
updated_at=item.updated_at,
)
for item, subject_no, site_id in rows
]