fix: 音频上传422错误 — create_asset project_id改为可选,从library自动推导 #1260
Reference in New Issue
Block a user
Delete Branch "fix/asset-create-optional-project-id"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
问题
前端调用 POST /api/v1/assets 创建配音素材时返回 422,因为 CreateAssetRequest 要求 project_id 必填,但前端没传。
修复
apps/api/app/schemas/asset.py:project_id从必填改为可选str | None = Field(default=None)apps/api/app/api/routes/assets.py:create_asset函数中先获取 library,再从library.project_id自动推导 project_id测试
新增 4 个单元测试:
全量 asset 相关测试 40 个全过。
🚀 预览环境已部署
【阻塞级判定】
📊 审查概览
🔴 阻塞级问题(必须修复)
无
💡 改进建议(不阻塞合并)
project_id = request.project_id or library.project_id。虽然通常 AssetLibrary 必须关联 Project,但如果数据库中library.project_id允许为 NULL 且恰好为 NULL,project_id将为 None。此时调用project_repository.find_by_id(None)可能会导致数据库查询异常(如语法错误)或返回意外的结果。建议在调用find_by_id前增加非空校验,确保数据完整性。✅ 良好实践
project_id的推导逻辑(请求值优先,回退到 library 关联值)处理得非常清晰。library.project_id != project_id的校验,并返回了更符合语义的 400 错误(原代码在 ID 不匹配时返回 404,容易误导),防止了跨项目操作的潜在风险。🤖 由 AI 代码审查机器人自动生成 | 2026-08-07 06:54:59 | 模型:
🗑️ 预览环境已清理
PR #1260 已关闭或合并,对应的预览环境已被清理。