Files
myeasycms-v2/packages/features/booking-management/src/schema/booking.schema.ts
T. Zehetbauer 5c5aaabae5
Some checks failed
Workflow / ʦ TypeScript (pull_request) Failing after 5m57s
Workflow / ⚫️ Test (pull_request) Has been skipped
refactor: remove obsolete member management API module
2026-04-03 14:08:31 +02:00

59 lines
1.6 KiB
TypeScript

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<typeof CreateBookingSchema>;
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'),
});