立项配置页初步优化
This commit is contained in:
@@ -85,16 +85,29 @@ async def list_subjects(
|
||||
return []
|
||||
subject_ids = [subject.id for subject in subject_list]
|
||||
ae_rows = await db.execute(
|
||||
select(AdverseEvent.subject_id).where(
|
||||
select(AdverseEvent.subject_id, AdverseEvent.is_sae, AdverseEvent.is_susar).where(
|
||||
AdverseEvent.study_id == study_id,
|
||||
AdverseEvent.subject_id.in_(subject_ids),
|
||||
)
|
||||
)
|
||||
ae_subject_ids = {row[0] for row in ae_rows.all() if row[0]}
|
||||
ae_flags: dict[uuid.UUID, dict[str, bool]] = {}
|
||||
for row in ae_rows.all():
|
||||
sid = row[0]
|
||||
if not sid:
|
||||
continue
|
||||
if sid not in ae_flags:
|
||||
ae_flags[sid] = {"has_ae": True, "has_sae": False, "has_susar": False}
|
||||
if row[1]:
|
||||
ae_flags[sid]["has_sae"] = True
|
||||
if row[2]:
|
||||
ae_flags[sid]["has_susar"] = True
|
||||
result: list[SubjectRead] = []
|
||||
for subject in subject_list:
|
||||
data = SubjectRead.model_validate(subject)
|
||||
data.has_ae = subject.id in ae_subject_ids
|
||||
flags = ae_flags.get(subject.id, {"has_ae": False, "has_sae": False, "has_susar": False})
|
||||
data.has_ae = flags["has_ae"]
|
||||
data.has_sae = flags["has_sae"]
|
||||
data.has_susar = flags["has_susar"]
|
||||
result.append(data)
|
||||
return result
|
||||
|
||||
@@ -120,12 +133,21 @@ async def get_subject(
|
||||
await _ensure_subject_active(db, subject)
|
||||
data = SubjectRead.model_validate(subject)
|
||||
ae_row = await db.execute(
|
||||
select(AdverseEvent.id).where(
|
||||
select(AdverseEvent.is_sae, AdverseEvent.is_susar).where(
|
||||
AdverseEvent.study_id == study_id,
|
||||
AdverseEvent.subject_id == subject.id,
|
||||
).limit(1)
|
||||
)
|
||||
)
|
||||
data.has_ae = ae_row.scalar_one_or_none() is not None
|
||||
ae_flags = {"has_ae": False, "has_sae": False, "has_susar": False}
|
||||
for row in ae_row.all():
|
||||
ae_flags["has_ae"] = True
|
||||
if row[0]:
|
||||
ae_flags["has_sae"] = True
|
||||
if row[1]:
|
||||
ae_flags["has_susar"] = True
|
||||
data.has_ae = ae_flags["has_ae"]
|
||||
data.has_sae = ae_flags["has_sae"]
|
||||
data.has_susar = ae_flags["has_susar"]
|
||||
return data
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user