fix: P0 紧急修复 — 回退域对象 extra_meta → metadata #80

Merged
xiaoxia merged 1 commits from fix/p0-extra-meta-rollback into develop 2026-06-28 18:11:09 +08:00
5 changed files with 19 additions and 19 deletions
+4 -4
View File
@@ -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))
+3 -3
View File
@@ -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
+4 -4
View File
@@ -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",
}
@@ -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}")
@@ -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)