Compare commits

..

2 Commits

Author SHA1 Message Date
xiaoxia d3bdec4f9c Merge branch 'develop' into refactor/step5-voice-hook
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 42s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m19s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 57s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m20s
CI/CD Pipeline / Validate - Code Quality (pull_request) Failing after 1m51s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 25s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 38s
AI Code Review / AI Code Review (pull_request) Successful in 1m0s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m1s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m9s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 5m16s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 4m23s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Has been cancelled
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 15s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 4m18s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 10m14s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 18s
CI/CD Pipeline / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Failing after 1221h3m34s
CI/CD Pipeline / ACR Image Cleanup (pull_request) Failing after 1221h22m23s
CI/CD Pipeline / Staging API Integration Tests (pull_request) Failing after 1221h22m25s
CI/CD Pipeline / Deploy Production (pull_request) Failing after 1221h23m25s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Failing after 1223h25m2s
CI/CD Pipeline / Build Production Web Image (pull_request) Failing after 1223h25m9s
CI/CD Pipeline / Build Production API Image (pull_request) Failing after 1223h25m11s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Failing after 1226h22m55s
CI/CD Pipeline / Build Staging API Image (pull_request) Failing after 1226h22m59s
CI/CD Pipeline / Staging E2E Tests (pull_request) Failing after 1221h55m13s
CI/CD Pipeline / Build Production Worker Image (pull_request) Failing after 1223h57m53s
CI/CD Pipeline / Build Staging Web Image (pull_request) Failing after 1226h55m43s
2026-07-27 12:34:29 +08:00
xiaoxia e13dd16816 refactor(generate): split useStep5Voice into sub-modules
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 22s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m11s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 1m14s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m17s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 39s
CI/CD Pipeline / Validate - Code Quality (pull_request) Failing after 2m26s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 1m41s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 1m13s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m8s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 50s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 5m40s
AI Code Review / AI Code Review (pull_request) Successful in 6m43s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Failing after 1m15s
CI/CD Pipeline / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Failing after 1243h44m15s
CI/CD Pipeline / ACR Image Cleanup (pull_request) Failing after 1243h45m44s
CI/CD Pipeline / Staging API Integration Tests (pull_request) Failing after 1243h45m46s
CI/CD Pipeline / Deploy Production (pull_request) Failing after 1243h45m50s
CI/CD Pipeline / Integration Tests (pull_request) Failing after 1243h52m26s
CI/CD Pipeline / Build Production Worker Image (pull_request) Failing after 1243h52m29s
CI/CD Pipeline / Build Production Web Image (pull_request) Failing after 1243h52m30s
CI/CD Pipeline / Build Production API Image (pull_request) Failing after 1243h52m31s
CI/CD Pipeline / Unit Tests (pull_request) Failing after 1243h52m33s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Failing after 1244h18m6s
CI/CD Pipeline / Build Staging API Image (pull_request) Failing after 1244h18m8s
CI/CD Pipeline / Staging E2E Tests (pull_request) Failing after 1244h18m30s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Failing after 1244h25m9s
CI/CD Pipeline / Build Staging Web Image (pull_request) Failing after 1244h50m48s
- Extract audio playback to useVoiceAudio.ts
- Extract voice recommendation to useVoiceRecommend.ts
- Extract TTS synthesis + polling to useTtsSynthesis.ts
- Extract save-to-library to useSaveToLibrary.tsx
- Main hook reduced from 397 to 184 lines (-54%)
- Keep import path unchanged
2026-07-26 18:28:32 +08:00
3 changed files with 84 additions and 116 deletions
@@ -1,15 +1,68 @@
/**
* 配音相关 API 函数
* 配音相关 API
* Phase 1 新增:全局配音库
*
* 任务 3.11:新增统一音色 API(对接后端 3.04),保留旧接口向后兼容
*/
import apiClient from "../client"
import type {
CreateVoiceRequest,
PresetVoiceListResponse,
UnifiedVoiceListParams,
UnifiedVoiceListResponse,
VoiceItem,
} from "./types"
import apiClient from "./client"
/* ── 统一音色 API(后端 3.04) ─────────────────────────── */
/** 统一音色条目(preset + clone 混合) */
export interface UnifiedVoiceItem {
id: string
type: "preset" | "clone"
name: string
description: string
gender: string
language: string
voice_id: string
voice_provider: string
audio_url: string | null
preview_url: string | null
duration: number | null
file_size: number | null
status: string
tags: string[]
user_id: string | null
project_id: string | null
voice_clone_profile_id: string | null
created_at: string | null
updated_at: string | null
}
/** 统一音色列表响应 */
export interface UnifiedVoiceListResponse {
items: UnifiedVoiceItem[]
total: number
preset_count: number
clone_count: number
}
/** 预设音色条目 */
export interface PresetVoiceItem {
voice_id: string
name: string
description: string
gender: string
language: string
preview_url: string | null
tags: string[]
}
/** 预设音色列表响应 */
export interface PresetVoiceListResponse {
items: PresetVoiceItem[]
total: number
}
/** 统一列表查询参数 */
export interface UnifiedVoiceListParams {
type?: "preset" | "clone"
status?: string
skip?: number
limit?: number
}
/** 获取统一音色列表(推荐) */
export const fetchVoices = async (
@@ -33,6 +86,28 @@ export const fetchPresetVoices = async (): Promise<PresetVoiceListResponse> => {
/* ── 向后兼容(旧接口) ────────────────────────────────── */
/** 配音条目(旧) */
export interface VoiceItem {
id: string
name: string
text: string
voice_type?: string
duration_seconds?: number
storage_key?: string
audio_url?: string
status?: string
is_favorite?: boolean
created_at?: string
updated_at?: string
}
/** 创建配音请求(旧) */
export interface CreateVoiceRequest {
name: string
text: string
voice_type?: string
}
/** 获取当前用户的所有配音(旧 → /voices/legacy) */
export const getVoices = async (): Promise<VoiceItem[]> => {
const response = await apiClient.get("/voices/legacy")
-26
View File
@@ -1,26 +0,0 @@
/**
* 配音相关 API — 目录化入口
* 保持与原 voices.ts 相同导出,向后兼容
*/
// 类型
export type {
UnifiedVoiceItem,
UnifiedVoiceListResponse,
PresetVoiceItem,
PresetVoiceListResponse,
UnifiedVoiceListParams,
VoiceItem,
CreateVoiceRequest,
} from "./types"
// API 函数
export {
fetchVoices,
fetchPresetVoices,
getVoices,
createVoice,
updateVoice,
deleteVoice,
generateAIVoice,
} from "./voices"
-81
View File
@@ -1,81 +0,0 @@
/**
* 配音相关类型定义
*/
/** 统一音色条目(preset + clone 混合) */
export interface UnifiedVoiceItem {
id: string
type: "preset" | "clone"
name: string
description: string
gender: string
language: string
voice_id: string
voice_provider: string
audio_url: string | null
preview_url: string | null
duration: number | null
file_size: number | null
status: string
tags: string[]
user_id: string | null
project_id: string | null
voice_clone_profile_id: string | null
created_at: string | null
updated_at: string | null
}
/** 统一音色列表响应 */
export interface UnifiedVoiceListResponse {
items: UnifiedVoiceItem[]
total: number
preset_count: number
clone_count: number
}
/** 预设音色条目 */
export interface PresetVoiceItem {
voice_id: string
name: string
description: string
gender: string
language: string
preview_url: string | null
tags: string[]
}
/** 预设音色列表响应 */
export interface PresetVoiceListResponse {
items: PresetVoiceItem[]
total: number
}
/** 统一列表查询参数 */
export interface UnifiedVoiceListParams {
type?: "preset" | "clone"
status?: string
skip?: number
limit?: number
}
/** 配音条目(旧) */
export interface VoiceItem {
id: string
name: string
text: string
voice_type?: string
duration_seconds?: number
storage_key?: string
audio_url?: string
status?: string
is_favorite?: boolean
created_at?: string
updated_at?: string
}
/** 创建配音请求(旧) */
export interface CreateVoiceRequest {
name: string
text: string
voice_type?: string
}