From 5aea009eddfd8e886d6b411bd2892f9cf27ccf0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Thu, 26 Feb 2026 21:11:06 +0100 Subject: [PATCH] refactor: simplify entitiesBatchRequest to use filterPredicateSchema directly MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.6 Signed-off-by: Fredrik Adelöw --- .../service/request/entitiesBatchRequest.ts | 35 ++++++------------- 1 file changed, 10 insertions(+), 25 deletions(-) diff --git a/plugins/catalog-backend/src/service/request/entitiesBatchRequest.ts b/plugins/catalog-backend/src/service/request/entitiesBatchRequest.ts index e3d8252d4c..02ad1d5566 100644 --- a/plugins/catalog-backend/src/service/request/entitiesBatchRequest.ts +++ b/plugins/catalog-backend/src/service/request/entitiesBatchRequest.ts @@ -20,18 +20,17 @@ import { FilterPredicate, } from '@backstage/filter-predicates'; import { Request } from 'express'; -import { z } from 'zod'; -import { z as zodV3 } from 'zod/v3'; +import { z } from 'zod/v3'; import { fromZodError } from 'zod-validation-error/v3'; +const filterPredicateSchema = createZodV3FilterPredicateSchema(z); + const schema = z.object({ entityRefs: z.array(z.string()), fields: z.array(z.string()).optional(), - query: z.record(z.unknown()).optional(), + query: filterPredicateSchema.optional(), }); -const filterPredicateSchema = createZodV3FilterPredicateSchema(zodV3); - export interface ParsedEntitiesBatchRequest { entityRefs: string[]; fields?: string[]; @@ -39,27 +38,13 @@ export interface ParsedEntitiesBatchRequest { } export function entitiesBatchRequest(req: Request): ParsedEntitiesBatchRequest { - let parsed: z.infer; - try { - parsed = schema.parse(req.body); - } catch (error) { + const result = schema.safeParse(req.body); + if (!result.success) { throw new InputError( - `Malformed request body (did you remember to specify an application/json content type?), ${error.message}`, + `Malformed request body (did you remember to specify an application/json content type?), ${fromZodError( + result.error, + )}`, ); } - - let query: FilterPredicate | undefined; - if (parsed.query !== undefined) { - const result = filterPredicateSchema.safeParse(parsed.query); - if (!result.success) { - throw new InputError(`Invalid query: ${fromZodError(result.error)}`); - } - query = result.data; - } - - return { - entityRefs: parsed.entityRefs, - fields: parsed.fields, - query, - }; + return result.data; }