feat: add scheduling conflict helpers

This commit is contained in:
2026-06-25 11:39:34 +01:00
parent cac9d0e04d
commit 44b34c850c
2 changed files with 160 additions and 10 deletions
+20 -10
View File
@@ -1,14 +1,24 @@
import { z } from 'zod';
import { idSchema, optionalText, requiredText } from './shared.schema';
export const bookingCreateSchema = z.object({
clientId: requiredText('Client'),
roomId: requiredText('Room'),
serviceId: optionalText(80),
startsAt: requiredText('Start time', 40),
endsAt: requiredText('End time', 40),
status: z.enum(['booked', 'confirmed', 'completed', 'cancelled']).default('booked'),
notes: optionalText(1000)
});
export const bookingCreateSchema = z
.object({
clientId: requiredText('Client'),
roomId: requiredText('Room'),
serviceId: optionalText(80),
startsAt: requiredText('Start time', 40),
endsAt: requiredText('End time', 40),
status: z.enum(['booked', 'confirmed', 'completed', 'cancelled']).default('booked'),
notes: optionalText(1000)
})
.superRefine((data, ctx) => {
if (data.startsAt && data.endsAt && data.endsAt <= data.startsAt) {
ctx.addIssue({
code: 'custom',
path: ['endsAt'],
message: 'End time must be after the start time.'
});
}
});
export const bookingEditSchema = bookingCreateSchema.extend(idSchema.shape);
export const bookingEditSchema = bookingCreateSchema.safeExtend(idSchema.shape);