feat(documents): refresh detail pages and attachment cards

This commit is contained in:
Cheng Zhou
2026-06-08 11:03:34 +08:00
parent a3f6a04f35
commit 834b4f1d48
11 changed files with 2372 additions and 929 deletions
+10 -1
View File
@@ -77,6 +77,13 @@ def _version_snapshot(version: DocumentVersion) -> dict:
}
def _version_read(version: DocumentVersion, users_by_id: dict[uuid.UUID, object] | None = None) -> DocumentVersionRead:
creator = users_by_id.get(version.created_by) if users_by_id and version.created_by else None
return DocumentVersionRead.model_validate(version).model_copy(
update={"created_by_user": UserDisplay.model_validate(creator) if creator else None}
)
async def _ensure_study_access(db: AsyncSession, trial_id: uuid.UUID, current_user, action: str):
study = await study_crud.get(db, trial_id)
if not study:
@@ -242,6 +249,8 @@ async def get_document_detail(
owner_obj = await user_crud.get_by_id(db, doc.owner_id)
if owner_obj:
owner = UserDisplay.model_validate(owner_obj)
creator_ids = {v.created_by for v in versions if v.created_by}
version_creators = await user_crud.get_users_by_ids(db, creator_ids)
return DocumentDetail(
id=doc.id,
trial_id=doc.trial_id,
@@ -257,7 +266,7 @@ async def get_document_detail(
created_at=doc.created_at,
updated_at=doc.updated_at,
owner=owner,
version_timeline=[DocumentVersionRead.model_validate(v) for v in versions],
version_timeline=[_version_read(v, version_creators) for v in versions],
distribution_stats=distribution_stats,
)