diff --git a/src/app/api/discovery/tasks/route.ts b/src/app/api/discovery/tasks/route.ts index 6fce3e4..537c8bb 100644 --- a/src/app/api/discovery/tasks/route.ts +++ b/src/app/api/discovery/tasks/route.ts @@ -105,7 +105,6 @@ export async function GET(request: NextRequest) { } const validation = GetDiscoveryTasksQuerySchema.safeParse({ status: searchParams.get('status') || undefined, - statuses: searchParams.get('statuses') || undefined, // 新增:支持多状态查询 limit: searchParams.get('limit') || '10', offset: searchParams.get('offset') || '0', }) @@ -121,16 +120,17 @@ export async function GET(request: NextRequest) { ) } - const { status, statuses, limit, offset } = validation.data + const { status, limit, offset } = validation.data - // 构建查询条件:支持单状态和多状态查询 + // 构建查询条件:支持单状态或多状态(逗号分隔) let whereClause = {} - if (statuses && statuses.length > 0) { - // 多状态查询:?statuses=PENDING,FAILED - whereClause = { status: { in: statuses } } - } else if (status) { - // 单状态查询(向后兼容):?status=PENDING - whereClause = { status } + if (status) { + // 支持单状态 (?status=PENDING) 或多状态 (?status=PENDING,FAILED) + if (Array.isArray(status)) { + whereClause = { status: { in: status } } + } else { + whereClause = { status } + } } const tasks = await prisma.projectDiscoveryTask.findMany({ diff --git a/src/lib/validations.ts b/src/lib/validations.ts index 3ae4650..eb6e90e 100644 --- a/src/lib/validations.ts +++ b/src/lib/validations.ts @@ -104,11 +104,11 @@ export const UpdateDiscoveryTaskSchema = z.object({ }); export const GetDiscoveryTasksQuerySchema = z.object({ - status: TaskStatusEnum.optional(), // 保持向后兼容:单状态查询 - statuses: z.string().optional().transform((val) => { - // 将逗号分隔的字符串转换为数组,如 "PENDING,FAILED" → ["PENDING", "FAILED"] + status: z.string().optional().transform((val) => { + // 支持单状态或多状态(逗号分隔),如 "PENDING" 或 "PENDING,FAILED" if (!val) return undefined; - return val.split(',').map(s => s.trim() as TaskStatus).filter(Boolean); + const statuses = val.split(',').map(s => s.trim() as TaskStatus).filter(Boolean); + return statuses.length === 1 ? statuses[0] : statuses; }), limit: z.coerce.number().int().positive().max(100).default(10), offset: z.coerce.number().int().nonnegative().default(0),