From 9b016e3b2da6cd3f46bc14b94d2025d669089cd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?API=E6=96=87=E6=A1=A3=E7=BB=B4=E6=8A=A4Agent?= Date: Sun, 28 Jun 2026 17:56:02 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=9B=9E=E9=80=80=E5=9F=9F=E5=AF=B9?= =?UTF-8?q?=E8=B1=A1=20extra=5Fmeta=20=E2=86=92=20metadata=EF=BC=885?= =?UTF-8?q?=E6=96=87=E4=BB=B616=E5=A4=84=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Asset 域对象属性名为 metadata,不是 extra_meta。 extra_meta 仅用于 SQLAlchemy model 层(对应 DB 列)。 修复文件: - packages/adapters/sqlalchemy_impl/asset_repository.py (L63, L88) - apps/api/app/api/routes/assets.py (L30, L72, L73) - apps/api/app/api/routes/asset_diagnosis.py (L52, L55, L56, L57) - apps/worker/worker_app/core/asset_usage.py (L5, L6, L7, L9) - apps/worker/worker_app/tasks/voice_extraction.py (L69, L70, L71, L104, L105, L106) --- apps/api/app/api/routes/asset_diagnosis.py | 8 ++++---- apps/api/app/api/routes/assets.py | 6 +++--- apps/worker/worker_app/core/asset_usage.py | 8 ++++---- apps/worker/worker_app/tasks/voice_extraction.py | 12 ++++++------ .../adapters/sqlalchemy_impl/asset_repository.py | 4 ++-- 5 files changed, 19 insertions(+), 19 deletions(-) diff --git a/apps/api/app/api/routes/asset_diagnosis.py b/apps/api/app/api/routes/asset_diagnosis.py index d852bcb04..76fd75967 100644 --- a/apps/api/app/api/routes/asset_diagnosis.py +++ b/apps/api/app/api/routes/asset_diagnosis.py @@ -49,12 +49,12 @@ def _build_diagnosis(project_id: str, assets: list[Asset]) -> ProjectAssetDiagno asset for asset in ready_assets if (asset.quality_score is not None and asset.quality_score < 60) - or asset.extra_meta.get("review_status") == "rejected" + or asset.metadata.get("review_status") == "rejected" or asset.status == AssetStatus.ERROR ] - used_assets = [asset for asset in ready_assets if int(asset.extra_meta.get("generation_use_count") or 0) > 0] - unused_assets = [asset for asset in ready_assets if int(asset.extra_meta.get("generation_use_count") or 0) == 0] - pending_review_assets = [asset for asset in ready_assets if asset.extra_meta.get("review_status") == "pending_review"] + used_assets = [asset for asset in ready_assets if int(asset.metadata.get("generation_use_count") or 0) > 0] + unused_assets = [asset for asset in ready_assets if int(asset.metadata.get("generation_use_count") or 0) == 0] + pending_review_assets = [asset for asset in ready_assets if asset.metadata.get("review_status") == "pending_review"] total_duration = round(sum(float(asset.duration or 0) for asset in video_assets), 2) estimated_video_count = max( 0, min(len(video_assets), int(total_duration // 5) if total_duration else len(video_assets)) diff --git a/apps/api/app/api/routes/assets.py b/apps/api/app/api/routes/assets.py index befcabd28..aa37bfe99 100644 --- a/apps/api/app/api/routes/assets.py +++ b/apps/api/app/api/routes/assets.py @@ -27,7 +27,7 @@ def _to_asset_response(item) -> AssetResponse: name=item.name, storage_key=item.storage_key, mime_type=item.mime_type, - metadata=item.extra_meta, + metadata=item.metadata, file_size=item.file_size, thumbnail_url=item.thumbnail_url, duration=item.duration, @@ -69,8 +69,8 @@ def list_assets( def _apply_asset_review_status(item, review_status: str): - item.extra_meta = { - **item.extra_meta, + item.metadata = { + **item.metadata, "review_status": review_status, } return item diff --git a/apps/worker/worker_app/core/asset_usage.py b/apps/worker/worker_app/core/asset_usage.py index 9a9efdd9a..891e0a24c 100644 --- a/apps/worker/worker_app/core/asset_usage.py +++ b/apps/worker/worker_app/core/asset_usage.py @@ -2,9 +2,9 @@ from datetime import datetime, timezone def mark_asset_used_for_generation(asset) -> None: - asset.extra_meta = { - **asset.extra_meta, - "generation_use_count": int(asset.extra_meta.get("generation_use_count") or 0) + 1, + asset.metadata = { + **asset.metadata, + "generation_use_count": int(asset.metadata.get("generation_use_count") or 0) + 1, "last_used_at": datetime.now(timezone.utc).isoformat(), - "review_status": asset.extra_meta.get("review_status") or "pending_review", + "review_status": asset.metadata.get("review_status") or "pending_review", } diff --git a/apps/worker/worker_app/tasks/voice_extraction.py b/apps/worker/worker_app/tasks/voice_extraction.py index d92f6f3cc..38641e66b 100644 --- a/apps/worker/worker_app/tasks/voice_extraction.py +++ b/apps/worker/worker_app/tasks/voice_extraction.py @@ -66,9 +66,9 @@ def extract_voice_task(self: Task, asset_id: str) -> dict: voice_storage_key = f"assets/{asset_id}/voice.mp3" storage_service.upload_file(voice_output_path, voice_storage_key) voice_url = storage_service.get_url(voice_storage_key) - if asset.extra_meta is None: - asset.extra_meta = {} - asset.extra_meta["voice_url"] = voice_url + if asset.metadata is None: + asset.metadata = {} + asset.metadata["voice_url"] = voice_url asset_repo.update(asset) session.commit() logger.info(f"Voice extraction completed for asset {asset_id}: {voice_url}") @@ -101,9 +101,9 @@ def extract_background_task(self: Task, asset_id: str) -> dict: bg_storage_key = f"assets/{asset_id}/background.mp3" storage_service.upload_file(bg_output_path, bg_storage_key) bg_url = storage_service.get_url(bg_storage_key) - if asset.extra_meta is None: - asset.extra_meta = {} - asset.extra_meta["background_url"] = bg_url + if asset.metadata is None: + asset.metadata = {} + asset.metadata["background_url"] = bg_url asset_repo.update(asset) session.commit() logger.info(f"Background extraction completed for asset {asset_id}: {bg_url}") diff --git a/packages/adapters/sqlalchemy_impl/asset_repository.py b/packages/adapters/sqlalchemy_impl/asset_repository.py index b2d6f0a1a..063edf77e 100644 --- a/packages/adapters/sqlalchemy_impl/asset_repository.py +++ b/packages/adapters/sqlalchemy_impl/asset_repository.py @@ -60,7 +60,7 @@ class SQLAlchemyAssetRepository: codec=asset.codec, status=asset.status.value, classification_status=asset.classification_status.value, - classification_result=(json.dumps(asset.extra_meta) if asset.extra_meta else None), + classification_result=(json.dumps(asset.metadata) if asset.metadata else None), quality_score=asset.quality_score, uploaded_by_user_id=asset.uploaded_by_user_id or "system", created_at=asset.created_at, @@ -85,7 +85,7 @@ class SQLAlchemyAssetRepository: model.codec = asset.codec model.status = asset.status.value model.classification_status = asset.classification_status.value - model.classification_result = json.dumps(asset.extra_meta) if asset.extra_meta else None + model.classification_result = json.dumps(asset.metadata) if asset.metadata else None model.quality_score = asset.quality_score model.uploaded_by_user_id = asset.uploaded_by_user_id or model.uploaded_by_user_id model.updated_at = datetime.now(timezone.utc) -- 2.54.0