File size: 847 Bytes
aec3094 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | import { z } from 'zod';
import { BadRequestError } from '@/errors/response-errors/bad-request.error';
import type { ExecutionRequest } from '@/executions/execution.types';
const executionUpdateSchema = z.object({
tags: z.array(z.string()).optional(),
vote: z.enum(['up', 'down']).nullable().optional(),
});
export function validateExecutionUpdatePayload(
payload: unknown,
): ExecutionRequest.ExecutionUpdatePayload {
try {
const validatedPayload = executionUpdateSchema.parse(payload);
// Additional check to ensure that at least one property is provided
const { tags, vote } = validatedPayload;
if (!tags && vote === undefined) {
throw new BadRequestError('No annotation provided');
}
return validatedPayload;
} catch (e) {
if (e instanceof z.ZodError) {
throw new BadRequestError(e.message);
}
throw e;
}
}
|