This commit is contained in:
2026-06-25 20:57:09 -05:00
parent 552b86c323
commit e47d09d7d6
35 changed files with 4507 additions and 101 deletions

View File

@@ -367,6 +367,24 @@ const runPlanPayloadSchema = z.object({
hostGroupIds: z.array(z.string()).optional()
});
const runPlanSchedulePayloadSchema = z.object({
name: z.string().min(1).max(180),
description: z.string().max(800).optional().default(''),
runplanId: z.string().min(1),
enabled: z.boolean().or(z.number()).optional().default(true),
scheduleType: z.enum(['once', 'interval', 'daily', 'weekly', 'monthly', 'yearly']).default('once'),
startAt: z.string().min(1),
endAt: z.string().optional().default(''),
timeOfDay: z.string().regex(/^\d{2}:\d{2}$/).optional().or(z.literal('')).default(''),
intervalValue: z.coerce.number().int().min(1).max(100000).optional().default(1),
intervalUnit: z.enum(['minutes', 'hours', 'days', 'months', 'years']).optional().default('hours'),
daysOfWeek: z.array(z.coerce.number().int().min(0).max(6)).optional().default([]),
dayOfMonth: z.coerce.number().int().min(1).max(31).nullable().optional(),
monthOfYear: z.coerce.number().int().min(1).max(12).nullable().optional(),
visibility: visibilitySchema.default('personal'),
groupId: z.string().nullable().optional()
});
export const scriptCompatibilitySchema = z.object({
hostId: z.string().optional().default(''),
hostGroupId: z.string().optional().default(''),
@@ -399,3 +417,24 @@ export function normalizeRunPlanPayload(body) {
hostGroupIds: parsed.hostGroupIds || []
};
}
export function normalizeRunPlanSchedulePayload(body) {
const parsed = runPlanSchedulePayloadSchema.parse(body);
return {
name: parsed.name,
description: parsed.description || '',
runplanId: parsed.runplanId,
enabled: Boolean(parsed.enabled),
scheduleType: parsed.scheduleType,
startAt: parsed.startAt,
endAt: parsed.endAt || '',
timeOfDay: parsed.timeOfDay || '',
intervalValue: parsed.intervalValue || 1,
intervalUnit: parsed.intervalUnit || 'hours',
daysOfWeek: [...new Set(parsed.daysOfWeek || [])].sort((a, b) => a - b),
dayOfMonth: parsed.dayOfMonth || null,
monthOfYear: parsed.monthOfYear || null,
visibility: parsed.visibility,
groupId: parsed.visibility === 'group' ? parsed.groupId ?? null : null
};
}