diff --git a/apps/web/src/api/products.ts b/apps/web/src/api/products.ts index 268dead23..1b53a37b2 100644 --- a/apps/web/src/api/products.ts +++ b/apps/web/src/api/products.ts @@ -2,12 +2,12 @@ * 成品 / 视频相关 API * 后端无 /products 路由,实际从 /generation/tasks 端点获取数据 */ -import apiClient from "./client"; -import { getGenerationTaskResults } from "./editPlans"; -import type { GeneratedVideo } from "./editPlans"; +import apiClient from './client'; +import { getGenerationTaskResults } from './editPlans'; +import type { GeneratedVideo } from './editPlans'; /** 复核状态 */ -export type ReviewStatus = "pending_review" | "approved" | "rejected"; +export type ReviewStatus = 'pending_review' | 'approved' | 'rejected'; /** 成品条目 */ export interface ProductItem { @@ -18,7 +18,7 @@ export interface ProductItem { duration_seconds?: number; file_size?: number; resolution?: string; - status: "processing" | "completed" | "failed"; + status: 'processing' | 'completed' | 'failed'; /** 复核状态 */ review_status?: ReviewStatus; /** 所属项目 ID */ @@ -36,7 +36,7 @@ export interface ProductListParams { page?: number; page_size?: number; project_id?: string; - review_status?: ReviewStatus | "all"; + review_status?: ReviewStatus | 'all'; } /** 分页响应 */ @@ -50,7 +50,7 @@ export interface ProductListResponse { /** 批量下载任务状态 */ export interface BatchDownloadStatus { job_id: string; - status: "processing" | "completed" | "failed"; + status: 'processing' | 'completed' | 'failed'; /** 完成后返回的下载 URL */ download_url?: string; /** 进度百分比 */ @@ -63,21 +63,18 @@ export interface BatchDownloadStatus { function mapTaskToProductItem(task: GeneratedVideo): ProductItem { return { id: task.id, - title: task.name || "未命名视频", + title: task.name || '未命名视频', video_url: task.file_url, thumbnail_url: task.thumbnail_url, duration_seconds: task.duration, file_size: task.file_size, - resolution: - task.width && task.height - ? `${task.width}x${task.height}` - : undefined, + resolution: task.width && task.height ? `${task.width}x${task.height}` : undefined, status: - task.status === "completed" - ? "completed" - : task.status === "failed" - ? "failed" - : "processing", + task.status === 'completed' + ? 'completed' + : task.status === 'failed' + ? 'failed' + : 'processing', review_status: task.review_status as ReviewStatus | undefined, project_id: task.project_id, created_at: task.created_at, @@ -86,10 +83,8 @@ function mapTaskToProductItem(task: GeneratedVideo): ProductItem { } /** 获取成品列表(支持分页和筛选)— 实际从 generation tasks 获取 */ -export const getProducts = async ( - params?: ProductListParams, -): Promise => { - const response = await apiClient.get("/generation/tasks", { params }); +export const getProducts = async (params?: ProductListParams): Promise => { + const response = await apiClient.get('/generation/tasks', { params }); const tasks = response.data.items || response.data || []; return tasks.map(mapTaskToProductItem); }; @@ -107,18 +102,18 @@ export const deleteProduct = async (productId: string): Promise => { /** 获取成品下载链接 — 从 generation task results 获取 */ export const getProductDownloadUrl = async ( - productId: string, + productId: string ): Promise<{ url: string; expires_at: string }> => { const videos = await getGenerationTaskResults(productId); const video = videos[0]; - if (!video?.download_url) throw new Error("下载链接不可用"); - return { url: video.download_url, expires_at: "" }; + if (!video?.download_url) throw new Error('下载链接不可用'); + return { url: video.download_url, expires_at: '' }; }; /** 更新复核状态 — TODO: 后端暂无对应端点,暂存本地状态 */ export const updateReviewStatus = async ( productId: string, - status: ReviewStatus, + status: ReviewStatus ): Promise => { // 后端暂无 /generation/tasks/{id}/review 端点 // 暂时返回当前状态,后续可扩展 @@ -127,21 +122,17 @@ export const updateReviewStatus = async ( }; /** 发起批量下载 — TODO: 后端暂无对应端点 */ -export const batchDownload = async ( - videoIds: string[], -): Promise<{ job_id: string }> => { +export const batchDownload = async (videoIds: string[]): Promise<{ job_id: string }> => { // 后端暂无 /generation/tasks/batch-download 端点 // 暂时返回模拟 job_id,后续可扩展 - console.warn("[batchDownload] 后端暂无批量下载端点", videoIds); + console.warn('[batchDownload] 后端暂无批量下载端点', videoIds); return { job_id: `mock-${Date.now()}` }; }; /** 查询批量下载状态 — TODO: 后端暂无对应端点 */ -export const getBatchDownloadStatus = async ( - jobId: string, -): Promise => { +export const getBatchDownloadStatus = async (jobId: string): Promise => { // 后端暂无 /generation/tasks/batch-download/{jobId} 端点 // 暂时返回模拟状态,后续可扩展 - console.warn("[getBatchDownloadStatus] 后端暂无批量下载状态端点", jobId); - return { job_id: jobId, status: "processing", progress: 0 }; + console.warn('[getBatchDownloadStatus] 后端暂无批量下载状态端点', jobId); + return { job_id: jobId, status: 'processing', progress: 0 }; };