Files
myeasycms-v2/packages/features/event-management/src/schema/event.schema.ts

52 lines
1.5 KiB
TypeScript

import { z } from 'zod';
export const EventStatusEnum = z.enum([
'planned',
'open',
'full',
'running',
'completed',
'cancelled',
]);
export const CreateEventSchema = z.object({
accountId: z.string().uuid(),
name: z.string().min(1).max(256),
description: z.string().optional(),
eventDate: z.string(),
eventTime: z.string().optional(),
endDate: z.string().optional(),
location: z.string().optional(),
capacity: z.number().int().optional(),
minAge: z.number().int().optional(),
maxAge: z.number().int().optional(),
fee: z.number().min(0).default(0),
status: EventStatusEnum.default('planned'),
registrationDeadline: z.string().optional(),
contactName: z.string().optional(),
contactEmail: z.string().email().optional().or(z.literal('')),
contactPhone: z.string().optional(),
});
export type CreateEventInput = z.infer<typeof CreateEventSchema>;
export const EventRegistrationSchema = z.object({
eventId: 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(),
dateOfBirth: z.string().optional(),
parentName: z.string().optional(),
parentPhone: z.string().optional(),
});
export const CreateHolidayPassSchema = z.object({
accountId: z.string().uuid(),
name: z.string().min(1),
year: z.number().int(),
description: z.string().optional(),
price: z.number().min(0).default(0),
validFrom: z.string().optional(),
validUntil: z.string().optional(),
});