refactor(voices): Phase 3 - extract 5 business hooks #877

Closed
xiaoxia wants to merge 6 commits from refactor/voice-library-phase3 into develop
Owner

VoiceLibrary Phase 3 重构 — 业务 Hook 抽离

背景

VoiceLibrary 三阶段重构的最后一步。Phase 1(类型/常量/工具)和 Phase 2(7个UI组件)已合入 develop,Phase 3 抽离业务逻辑 Hook。

抽离的 5 个业务 Hook

Hook 文件 职责 行数
useVoicesData hooks/useVoicesData.ts 预置/克隆/素材音色数据查询、筛选、搜索 119
useAudioPlayer hooks/useAudioPlayer.ts 音频播放控制(播放/暂停/进度/状态) 99
useVoiceUpload hooks/useVoiceUpload.ts 上传音色文件、拖拽、进度、提交 131
useTtsSynthesize hooks/useTtsSynthesize.ts TTS 合成弹窗逻辑(文本、音色选择、提交) 145
useCloneOperations hooks/useCloneOperations.ts 克隆音色操作(详情、删除、重试等) 105

设计原则

  1. 每个 Hook 只负责一个明确的业务领域
  2. Hook 返回值结构清晰:state + actions
  3. 保持原有的交互逻辑、状态流完全不变
  4. 复杂的内部状态和计算逻辑封装在 Hook 内
  5. 主组件只负责调用 Hook 并把数据传给 UI 组件

代码风格

参考 voice-materials Phase 3 的 Hook 写法和模式,保持一致的代码风格、命名规范和返回值结构。

测试

  • useAudioPlayer 单元测试(纯逻辑可测,13 个 test case)
  • smoke test 已更新,导入所有新 Hook 建立完整依赖链,防 vitest related 失败

行数变化

  • VoiceLibrary.tsx: ~798 行 → 480 行(减少约 40%)
  • 5 个 Hook 合计约 599 行

约束遵守

  • 0 any、0 ts-ignore、0 eslint-disable
  • 文件权限 644
  • 遵守 prettier / eslint / import order 规则
  • 未修改 CI 配置(.gitea/workflows/)
## VoiceLibrary Phase 3 重构 — 业务 Hook 抽离 ### 背景 VoiceLibrary 三阶段重构的最后一步。Phase 1(类型/常量/工具)和 Phase 2(7个UI组件)已合入 develop,Phase 3 抽离业务逻辑 Hook。 ### 抽离的 5 个业务 Hook | Hook | 文件 | 职责 | 行数 | |------|------|------|------| | `useVoicesData` | `hooks/useVoicesData.ts` | 预置/克隆/素材音色数据查询、筛选、搜索 | 119 | | `useAudioPlayer` | `hooks/useAudioPlayer.ts` | 音频播放控制(播放/暂停/进度/状态) | 99 | | `useVoiceUpload` | `hooks/useVoiceUpload.ts` | 上传音色文件、拖拽、进度、提交 | 131 | | `useTtsSynthesize` | `hooks/useTtsSynthesize.ts` | TTS 合成弹窗逻辑(文本、音色选择、提交) | 145 | | `useCloneOperations` | `hooks/useCloneOperations.ts` | 克隆音色操作(详情、删除、重试等) | 105 | ### 设计原则 1. 每个 Hook 只负责一个明确的业务领域 2. Hook 返回值结构清晰:state + actions 3. 保持原有的交互逻辑、状态流完全不变 4. 复杂的内部状态和计算逻辑封装在 Hook 内 5. 主组件只负责调用 Hook 并把数据传给 UI 组件 ### 代码风格 参考 voice-materials Phase 3 的 Hook 写法和模式,保持一致的代码风格、命名规范和返回值结构。 ### 测试 - ✅ `useAudioPlayer` 单元测试(纯逻辑可测,13 个 test case) - ✅ smoke test 已更新,导入所有新 Hook 建立完整依赖链,防 vitest related 失败 ### 行数变化 - `VoiceLibrary.tsx`: ~798 行 → 480 行(减少约 40%) - 5 个 Hook 合计约 599 行 ### 约束遵守 - 0 any、0 ts-ignore、0 eslint-disable - 文件权限 644 - 遵守 prettier / eslint / import order 规则 - 未修改 CI 配置(.gitea/workflows/)
xiaoxia added 1 commit 2026-07-25 14:11:13 +08:00
refactor(voices): Phase 3 - extract 5 hooks from VoiceLibrary
AI Code Review / AI Code Review (pull_request) Failing after 0s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 25s
CI/CD Pipeline / Validate - Code Quality (pull_request) Has been cancelled
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Has been cancelled
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Has been cancelled
CI/CD Pipeline / Unit Tests (pull_request) Has been cancelled
CI/CD Pipeline / Integration Tests (pull_request) Has been cancelled
CI/CD Pipeline / Frontend Lint (pull_request) Has been cancelled
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been cancelled
CI/CD Pipeline / PR Build API Image (pull_request) Has been cancelled
CI/CD Pipeline / PR Build Web Image (pull_request) Has been cancelled
CI/CD Pipeline / PR Build Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Staging API Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been cancelled
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been cancelled
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been cancelled
CI/CD Pipeline / Build Production API Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been cancelled
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been cancelled
Preview Deploy / Deploy Preview Environment (pull_request) Has been cancelled
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 47s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 49s
7b23e35d96
Extract logic into reusable hooks:
- useVoicesData: 3-tab data queries + filter state
- useAudioPlayer: playback control with simulated progress
- useCloneOperations: clone voice delete/retry/detail modal
- useTtsSynthesize: AI TTS synthesis with polling
- useVoiceUpload: audio upload modal + upload mutation

Main file reduced from 758 to 486 lines (-35.9%).
Functionally equivalent, no behavior changes.

Signed-off-by: xiaoxia <xiaoxia@xiaoxiajianji.com>
xiaoxia added 1 commit 2026-07-25 14:12:00 +08:00
test(voices): add hooks imports to smoke test for vitest related
AI Code Review / AI Code Review (pull_request) Failing after 0s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 17s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 47s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 33s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 52s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 36s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 48s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 1m36s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 1m53s
CI/CD Pipeline / Unit Tests (pull_request) Has been skipped
Preview Deploy / Deploy Preview Environment (pull_request) Failing after 11s
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 47s
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 16s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 3m33s
CI/CD Pipeline / Integration Tests (pull_request) Has been skipped
65a2081aa2
Explicitly import all 5 voice hooks in smoke test so that
vitest --related can properly detect test coverage for changes
in hook files.

Signed-off-by: xiaoxia <xiaoxia@xiaoxiajianji.com>
xiaoxia added 1 commit 2026-07-25 14:19:18 +08:00
fix(voices): prettier formatting for Phase 3 hooks
AI Code Review / AI Code Review (pull_request) Failing after 0s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 30s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 33s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 53s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 56s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 36s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 1m0s
Preview Deploy / Deploy Preview Environment (pull_request) Failing after 38s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 2m0s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 3m59s
CI/CD Pipeline / Unit Tests (pull_request) Has been cancelled
CI/CD Pipeline / Integration Tests (pull_request) Has been cancelled
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been cancelled
CI/CD Pipeline / PR Build API Image (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been cancelled
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been cancelled
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been cancelled
CI/CD Pipeline / Build Production API Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been cancelled
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been cancelled
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 48m23s
137480d0c6
Format all voices files with Prettier to match code style.

Signed-off-by: xiaoxia <xiaoxia@xiaoxiajianji.com>
auto-approve-bot approved these changes 2026-07-25 14:23:49 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot approved these changes 2026-07-25 14:23:49 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
xiaoxia added 1 commit 2026-07-25 14:26:50 +08:00
test(voices): add useAudioPlayer hook unit test
AI Code Review / AI Code Review (pull_request) Failing after 0s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 6s
CI/CD Pipeline / Validate - Code Quality (pull_request) Has been cancelled
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Has been cancelled
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Has been cancelled
CI/CD Pipeline / Unit Tests (pull_request) Has been cancelled
CI/CD Pipeline / Integration Tests (pull_request) Has been cancelled
CI/CD Pipeline / Frontend Lint (pull_request) Has been cancelled
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been cancelled
CI/CD Pipeline / PR Build API Image (pull_request) Has been cancelled
CI/CD Pipeline / PR Build Web Image (pull_request) Has been cancelled
CI/CD Pipeline / PR Build Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Staging API Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been cancelled
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been cancelled
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been cancelled
CI/CD Pipeline / Build Production API Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been cancelled
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been cancelled
Preview Deploy / Deploy Preview Environment (pull_request) Has been cancelled
PR Automation / Auto Approve on CI Green (pull_request) Successful in 35s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 36s
efbfeb91b2
xiaoxia changed title from refactor(voices): Phase 3 - extract 5 logic hooks to refactor(voices): Phase 3 - extract 5 business hooks 2026-07-25 14:27:05 +08:00
xiaoxia added 1 commit 2026-07-25 14:28:17 +08:00
chore(voices): fix file permissions to 644
AI Code Review / AI Code Review (pull_request) Failing after 0s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 8s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 30s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m6s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m2s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 36s
Preview Deploy / Deploy Preview Environment (pull_request) Failing after 25s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 1m1s
CI/CD Pipeline / Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 1m37s
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Failing after 23s
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 3m22s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 4m57s
CI/CD Pipeline / Integration Tests (pull_request) Has been skipped
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 47m31s
23a61c7048
xiaoxia added 1 commit 2026-07-25 15:04:17 +08:00
fix(voices): handleSeek should start play from seek time for different voice
AI Code Review / AI Code Review (pull_request) Failing after 0s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 20s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m32s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m33s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 27s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 1m58s
Preview Deploy / Deploy Preview Environment (pull_request) Failing after 11s
CI/CD Pipeline / Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 2m38s
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
PR Automation / Auto Approve on CI Green (pull_request) Successful in 1m0s
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 27s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 4m1s
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 5m9s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 3m11s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 42s
CI/CD Pipeline / Integration Tests (pull_request) Has been skipped
ACR Cleanup / ACR Image Cleanup (pull_request_target) Failing after 33s
78b0da47a5
xiaoxia closed this pull request 2026-07-25 15:09:15 +08:00

🗑️ 预览环境已清理

PR #877 已关闭或合并,对应的预览环境已被清理。

如有需要,可以重新打开 PR 来重新生成预览环境。

🗑️ **预览环境已清理** PR #877 已关闭或合并,对应的预览环境已被清理。 > 如有需要,可以重新打开 PR 来重新生成预览环境。
Some checks are pending
AI Code Review / AI Code Review (pull_request) Failing after 0s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 20s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m32s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m33s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 27s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 1m58s
Preview Deploy / Deploy Preview Environment (pull_request) Failing after 11s
CI/CD Pipeline / Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 2m38s
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
PR Automation / Auto Approve on CI Green (pull_request) Successful in 1m0s
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 27s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 4m1s
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 5m9s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 3m11s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 42s
CI/CD Pipeline / Integration Tests (pull_request) Has been skipped
ACR Cleanup / ACR Image Cleanup (pull_request_target) Failing after 33s

Pull request closed

Sign in to join this conversation.