feat: 配音列表 API 增强 — 预置音色 + 克隆音色统一接口 #164
Reference in New Issue
Block a user
Delete Branch "feature/task-304-voice-list-api"
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?
任务 3.04: 配音列表 API 增强
变更内容
type查询参数:preset(仅预置)/clone(仅克隆)/ 不传(全部)preset_count和clone_count架构
packages/domain/preset_voices.py),不存数据库apps/api/app/schemas/voice.py)测试
文件变更
packages/domain/preset_voices.py— 预置音色配置apps/api/app/schemas/voice.py— 统一响应 Schemaapps/api/app/api/routes/voices.py— 路由增强tests/unit/test_preset_voices.py— 单元测试🤖 Generated with Claude Code
🔍 PR #164 审查报告
PR: feature/task-304-voice-list-api → develop
Commit:
44dc893变更: 4 files, +607 / -4
审查时间: 2026-07-02 10:35
✅ 审查结论:通过(有条件)
核心功能设计合理,预置音色配置、type 过滤、排序逻辑均正确。发现 1 P1(
count_by_user传了不存在的status参数,运行时 TypeError)+ 5 P2,需修复 P1 后可合并。📄 文件审查
1.
packages/domain/preset_voices.py— ✅ 设计合理PresetVoicedataclass(frozen=True, slots=True)不可变,内存高效get_preset_voices()、get_preset_voice_by_id()、is_preset_voice()2.
apps/api/app/schemas/voice.py— ✅ Schema 完整UnifiedVoiceItemResponse:type: Literal["preset", "clone"]区分类型UnifiedVoiceListResponse:含preset_count/clone_countPresetVoiceItemResponse/PresetVoiceListResponse:独立端点响应3.
apps/api/app/api/routes/voices.py— ⚠️ 核心逻辑有 P1✅ 正确部分:
type过滤逻辑正确:None→ 全部,"preset"→ 仅预置,"clone"→ 仅克隆items.extend(preset_items)先于items.extend(clone_items),预置在前/presets端点路由顺序正确(在/{voice_id}之前)/legacy端点保留原有格式(但路径不同,见 P2-3)/presets不需要认证(合理设计)❌ P1:
clone_repository_count调用不存在的方法签名SQLAlchemyVoiceLibraryRepository.count_by_user签名为count_by_user(self, user_id: str) -> int,不接受status参数。当用户传入?status=xxx查询参数时,会触发TypeError: count_by_user() got an unexpected keyword argument 'status'。4.
tests/unit/test_preset_voices.py— ✅ 覆盖充分🔴 P1 — 必须修复
count_by_user(user_id, status=status_filter)调用不存在的方法签名。需给count_by_user增加status参数,或在clone_repository_count中过滤 status 后再计数🟡 P2 — 建议修复
longxiaochun_v3、longyue_v3等,代码中使用无后缀版本(longxiaochun)。需确认使用的模型版本是否支持无后缀参数名longxiaochen(龙小晨)、longshu(龙书)、longjing(龙静)。可能在旧版模型中存在,但建议替换为 v3 可用音色GET /api/v1/voices响应模型从ListVoiceLibraryResponse({items, total})变更为UnifiedVoiceListResponse({items, total, preset_count, clone_count}),且 items 字段名变化(text→description,新增type/gender等)。/legacy端点保留旧格式但路径不同。建议前端同步适配,或保持原路径不变limit=1000全量拉取后内存分页。若用户克隆音色较多,建议改为数据库层分页审查要点逐项回应
extend(preset_items)先于extend(clone_items)总结
结论:✅ 通过(有条件) — 修复 P1-1(
count_by_userstatus 参数)后可合并。P2 建议后续迭代处理。