creative_studio/frontend/src/services/projectService.ts

176 lines
4.1 KiB
TypeScript

/**
* 项目 API 服务
*/
import api from './api'
export interface CharacterProfile {
name: string
description?: string
personality?: string
speechStyle?: string
currentState?: string
relationships?: Record<string, string>
}
export interface SceneSetting {
name: string
description?: string
atmosphere?: string
}
export interface GlobalContext {
worldSetting?: string
characterProfiles?: Record<string, CharacterProfile>
sceneSettings?: Record<string, SceneSetting>
overallOutline?: string
styleGuide?: string
uploadedScript?: string
inspiration?: string
}
// Skills 配置相关类型
export interface SkillAssignment {
skill_id: string
enabled: boolean
priority: number
parameter_overrides?: Record<string, any>
}
export interface TaskSkillConfig {
task_type: 'dialogue' | 'review' | 'outline' | 'structure' | 'scene' | 'consistency'
skills: SkillAssignment[]
}
export interface EpisodeSkillOverride {
episode_number: number
task_configs: TaskSkillConfig[]
use_project_default: boolean
}
export interface SeriesProject {
id: string
name: string
type: string
agentId: string
mode: string
genre?: string
globalContext: GlobalContext
totalEpisodes: number
// 三级 Skills 配置
defaultTaskSkills: TaskSkillConfig[]
episodeSkillOverrides: Record<number, EpisodeSkillOverride>
// 保留兼容
skillSettings: Record<string, any>
// 剧集列表(用于计算完成度)
episodes?: Episode[]
createdAt: string
updatedAt: string
}
export interface Episode {
id: string
projectId: string
number: number
title: string
status: string
content?: string
outline?: string
qualityScore?: number
issues: Array<{
type: string
description: string
severity: string
suggestion?: string
}>
createdAt: string
completedAt?: string
}
export interface ProjectCreateRequest {
name: string
totalEpisodes?: number
agentId?: string
mode?: string
genre?: string
globalContext?: GlobalContext
// 三级 Skills 配置
defaultTaskSkills?: TaskSkillConfig[]
episodeSkillOverrides?: Record<number, EpisodeSkillOverride>
// 保留兼容
skillSettings?: Record<string, any>
}
export const projectService = {
// 创建项目
createProject: async (data: ProjectCreateRequest) => {
return await api.post<SeriesProject>('/projects', data)
},
// 列出项目
listProjects: async () => {
return await api.get<SeriesProject[]>('/projects')
},
// 获取项目详情
getProject: async (projectId: string) => {
return await api.get<SeriesProject>(`/projects/${projectId}`)
},
// 更新项目
updateProject: async (projectId: string, data: Partial<SeriesProject>) => {
return await api.put<SeriesProject>(`/projects/${projectId}`, data)
},
// 删除项目
deleteProject: async (projectId: string) => {
return await api.delete(`/projects/${projectId}`)
},
// 列出剧集
listEpisodes: async (projectId: string) => {
return await api.get<Episode[]>(`/projects/${projectId}/episodes`)
},
// 获取指定剧集
getEpisode: async (projectId: string, episodeNumber: number) => {
return await api.get<Episode>(`/projects/${projectId}/episodes/${episodeNumber}`)
},
// 更新剧集内容
updateEpisode: async (projectId: string, episodeNumber: number, data: Partial<Episode>) => {
return await api.put<Episode>(`/projects/${projectId}/episodes/${episodeNumber}`, data)
},
// 执行单集创作
executeEpisode: async (
projectId: string,
episodeNumber: number,
title?: string
) => {
return await api.post<{
episode: Episode
success: boolean
message: string
}>(`/projects/${projectId}/execute`, {
episodeNumber,
title: title || `${episodeNumber}`,
})
},
// 批量执行
executeBatch: async (
projectId: string,
startEpisode: number,
endEpisode: number
) => {
return await api.post(`/projects/${projectId}/execute-batch`, null, {
params: { start_episode: startEpisode, end_episode: endEpisode }
})
},
// 获取记忆系统
getMemory: async (projectId: string) => {
return await api.get(`/projects/${projectId}/memory`)
},
}