feat(task-processor): implement PictureTaskProcessor for background image processing tasks

This commit is contained in:
shiyu
2025-06-07 21:26:24 +08:00
parent 46b9b3a5e4
commit 2d5e2bf3fb
21 changed files with 989 additions and 802 deletions

View File

@@ -1,29 +1,36 @@
import { fetchApi, type BaseResult } from './fetchClient';
import type { ProcessingStatus } from './pictureApi';
// 图片处理任务
export interface PictureProcessingTask {
pictureId: number;
// 通用任务视图模型
export interface TaskDetailsViewModel {
taskId: string;
pictureName: string;
status: ProcessingStatus;
taskName: string; // 任务的描述性名称
taskType: number; // 任务类型 (例如 0 for "PictureProcessing")
status: TaskExecutionStatus; // 修改: 类型将是数字枚举
progress: number; // 0-100
error?: string;
createdAt: Date;
completedAt?: Date;
relatedEntityId?: number;
}
// 修改: TaskExecutionStatus 定义为数字枚举
export enum TaskExecutionStatus {
Pending = 0, // 等待处理
Processing = 1, // 处理中
Completed = 2, // 处理完成
Failed = 3 // 处理失败
}
/**
* 获取当前用户的所有处理任务
*/
export const getUserTasks = async (): Promise<BaseResult<PictureProcessingTask[]>> => {
return fetchApi<PictureProcessingTask[]>('/background-tasks/user-tasks');
export const getUserTasks = async (): Promise<BaseResult<TaskDetailsViewModel[]>> => {
return fetchApi<TaskDetailsViewModel[]>('/background-tasks/user-tasks');
};
/**
* 获取特定图片的处理状态
* 获取特定图片的处理状态 (实际获取的是与该图片关联的任务状态)
* @param pictureId 图片ID
*/
export const getPictureProcessingStatus = async (pictureId: number): Promise<BaseResult<PictureProcessingTask>> => {
return fetchApi<PictureProcessingTask>(`/background-tasks/picture-status/${pictureId}`);
export const getPictureTaskExecutionStatus = async (pictureId: number): Promise<BaseResult<TaskDetailsViewModel>> => {
return fetchApi<TaskDetailsViewModel>(`/background-tasks/picture-status/${pictureId}`);
};

View File

@@ -20,16 +20,7 @@ export interface FilteredPicturesRequest {
includeAllPublic?: boolean;
}
// 将类型定义改为枚举,这样既可以作为类型也可以作为值使用
export type ProcessingStatus = 'Pending' | 'Processing' | 'Completed' | 'Failed';
// 添加常量对象提供运行时值
export const ProcessingStatus = {
Pending: 'Pending' as ProcessingStatus,
Processing: 'Processing' as ProcessingStatus,
Completed: 'Completed' as ProcessingStatus,
Failed: 'Failed' as ProcessingStatus
};
// 图片响应数据
export interface PictureResponse {
@@ -49,9 +40,6 @@ export interface PictureResponse {
permission: number;
albumId?: number;
albumName?: string;
processingStatus: ProcessingStatus;
processingError?: string;
processingProgress: number;
}
// 收藏请求