41 lines
1.4 KiB
TypeScript
41 lines
1.4 KiB
TypeScript
import { z } from 'zod';
|
|
|
|
export const approvalActionSchema = z.object({
|
|
action: z.enum(['APPROVE', 'REJECT']),
|
|
comments: z.string().optional(),
|
|
rejectionReason: z.string().optional(),
|
|
});
|
|
|
|
// Helper to validate UUID or requestNumber format
|
|
// Supports both old format (REQ-YYYY-NNNNN) and new format (REQ-YYYY-MM-XXXX)
|
|
const workflowIdValidator = z.string().refine(
|
|
(val) => {
|
|
// Check if it's a UUID
|
|
const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
|
|
if (uuidRegex.test(val)) {
|
|
return true;
|
|
}
|
|
// Check if it's a valid requestNumber format
|
|
// Old format: REQ-YYYY-NNNNN (e.g., REQ-2025-12057) - 5+ digits after year
|
|
// New format: REQ-YYYY-MM-XXXX (e.g., REQ-2025-11-0001) - 2-digit month, 4-digit counter
|
|
const oldFormatRegex = /^REQ-\d{4}-\d{5,}$/i; // Old: REQ-2025-12057
|
|
const newFormatRegex = /^REQ-\d{4}-\d{2}-\d{4}$/i; // New: REQ-2025-11-0001
|
|
if (oldFormatRegex.test(val) || newFormatRegex.test(val)) {
|
|
return true;
|
|
}
|
|
return false;
|
|
},
|
|
{
|
|
message: 'Invalid workflow ID - must be a UUID or requestNumber format (e.g., REQ-2025-11-0001 or REQ-2025-12057)'
|
|
}
|
|
);
|
|
|
|
export const approvalParamsSchema = z.object({
|
|
id: workflowIdValidator,
|
|
levelId: z.string().uuid('Invalid approval level ID'),
|
|
});
|
|
|
|
export const validateApprovalAction = (data: any) => {
|
|
return approvalActionSchema.parse(data);
|
|
};
|