diff --git a/apps/web/src/api/voices/index.ts b/apps/web/src/api/voices/index.ts new file mode 100644 index 000000000..182aa7d31 --- /dev/null +++ b/apps/web/src/api/voices/index.ts @@ -0,0 +1,26 @@ +/** + * 配音相关 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" diff --git a/apps/web/src/api/voices/types.ts b/apps/web/src/api/voices/types.ts new file mode 100644 index 000000000..25c10b94b --- /dev/null +++ b/apps/web/src/api/voices/types.ts @@ -0,0 +1,81 @@ +/** + * 配音相关类型定义 + */ + +/** 统一音色条目(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 +} diff --git a/apps/web/src/api/voices.ts b/apps/web/src/api/voices/voices.ts similarity index 54% rename from apps/web/src/api/voices.ts rename to apps/web/src/api/voices/voices.ts index 7d777606b..9401645c4 100644 --- a/apps/web/src/api/voices.ts +++ b/apps/web/src/api/voices/voices.ts @@ -1,68 +1,15 @@ /** - * 配音相关 API - * Phase 1 新增:全局配音库 - * + * 配音相关 API 函数 * 任务 3.11:新增统一音色 API(对接后端 3.04),保留旧接口向后兼容 */ -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 -} +import apiClient from "../client" +import type { + CreateVoiceRequest, + PresetVoiceListResponse, + UnifiedVoiceListParams, + UnifiedVoiceListResponse, + VoiceItem, +} from "./types" /** 获取统一音色列表(推荐) */ export const fetchVoices = async ( @@ -86,28 +33,6 @@ export const fetchPresetVoices = async (): Promise => { /* ── 向后兼容(旧接口) ────────────────────────────────── */ -/** 配音条目(旧) */ -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 => { const response = await apiClient.get("/voices/legacy")