import { z } from 'zod'; export const BookingStatusEnum = z.enum([ 'pending', 'confirmed', 'checked_in', 'checked_out', 'cancelled', 'no_show', ]); export const CreateRoomSchema = z.object({ accountId: z.string().uuid(), roomNumber: z.string().min(1), name: z.string().optional(), roomType: z.string().default('standard'), capacity: z.number().int().min(1).default(2), floor: z.number().int().optional(), pricePerNight: z.number().min(0), description: z.string().optional(), }); export const CreateBookingSchema = z .object({ accountId: z.string().uuid(), roomId: z.string().uuid(), guestId: z.string().uuid().optional(), checkIn: z.string(), checkOut: z.string(), adults: z.number().int().min(1).default(1), children: z.number().int().min(0).default(0), status: BookingStatusEnum.default('confirmed'), totalPrice: z.number().min(0).optional(), notes: z.string().optional(), }) .refine((d) => d.checkOut > d.checkIn, { message: 'Abreisedatum muss nach dem Anreisedatum liegen', path: ['checkOut'], }); export type CreateBookingInput = z.infer; export const UpdateBookingStatusSchema = z.object({ bookingId: z.string().uuid(), status: BookingStatusEnum, version: z.number().int().optional(), }); export const CreateGuestSchema = z.object({ accountId: z.string().uuid(), firstName: z.string().min(1), lastName: z.string().min(1), email: z.string().email().optional().or(z.literal('')), phone: z.string().optional(), street: z.string().optional(), postalCode: z.string().optional(), city: z.string().optional(), country: z.string().default('DE'), });