修复项目配置草稿原子保存逻辑

This commit is contained in:
Cheng Zhou
2026-05-11 11:03:06 +08:00
parent 8d061a1520
commit 20d45cfdfe
6 changed files with 333 additions and 59 deletions
+2 -10
View File
@@ -242,6 +242,7 @@ def _build_default_setup_config_from_study(study, sites: list) -> StudySetupConf
if total_target is None:
total_target = 0
return StudySetupConfigData(
projectInfo=_build_project_publish_snapshot(study),
projectMilestones=[],
enrollmentPlan={
"totalTarget": total_target,
@@ -263,13 +264,6 @@ def _to_date_text(value: date | None) -> str:
return value.isoformat()
def _project_snapshot_has_draft_values(snapshot: ProjectPublishSnapshot | None) -> bool:
if not snapshot:
return False
data = snapshot.model_dump(mode="json")
return any(value not in ("", None, []) for value in data.values())
def _build_project_publish_snapshot(study) -> ProjectPublishSnapshot:
return ProjectPublishSnapshot(
code=getattr(study, "code", None) or "",
@@ -296,9 +290,7 @@ def _build_project_publish_snapshot(study) -> ProjectPublishSnapshot:
def _resolve_setup_project_snapshot(setup_data: StudySetupConfigData, study) -> ProjectPublishSnapshot:
if _project_snapshot_has_draft_values(setup_data.projectInfo):
return setup_data.projectInfo
return _build_project_publish_snapshot(study)
return setup_data.projectInfo
def _parse_optional_snapshot_date(value: str) -> date | None: