import { z } from 'zod'; import { createPageSchema, createPageSizeSchema, createPaginationSchema } from './pagination.js'; const isoDateTimeSchema = z.string().datetime(); const pageSchema = createPageSchema(); const pageSizeSchema = createPageSizeSchema(10); const paginationSchema = createPaginationSchema(); export const waitlistStatusSchema = z.enum(['PENDING', 'INVITED', 'JOINED', 'DECLINED']); export const WaitlistEntryDtoSchema = z.object({ id: z.string(), email: z.string(), name: z.string().nullable(), status: waitlistStatusSchema, createdAt: isoDateTimeSchema, updatedAt: isoDateTimeSchema, }); export type WaitlistEntryDto = z.output; export const WaitlistQuerySchema = z.object({ page: pageSchema, pageSize: pageSizeSchema, }); export type WaitlistQuery = z.output; export const WaitlistListSchema = z.object({ data: z.array(WaitlistEntryDtoSchema), pagination: paginationSchema, }); export type WaitlistList = z.output; export const GroupWaitlistEntryDtoSchema = z.object({ id: z.string(), groupId: z.string(), fullName: z.string(), phone: z.string(), email: z.string().nullable(), notes: z.string().nullable(), status: waitlistStatusSchema, createdAt: isoDateTimeSchema, updatedAt: isoDateTimeSchema, }); export type GroupWaitlistEntryDto = z.output; export const CreateGroupWaitlistEntrySchema = z.object({ firstName: z.string().trim().min(1, 'El nombre es obligatorio'), lastName: z.string().trim().optional().default(''), phone: z.string().trim().min(6, 'Ingresa un número de teléfono válido'), email: z.string().trim().email('Email inválido').optional().or(z.literal('')), notes: z.string().trim().optional(), }); export type CreateGroupWaitlistEntry = z.output; export const GroupWaitlistQuerySchema = z.object({ page: pageSchema, pageSize: pageSizeSchema, }); export type GroupWaitlistQuery = z.output; export const GroupWaitlistListSchema = z.object({ data: z.array(GroupWaitlistEntryDtoSchema), pagination: paginationSchema, }); export type GroupWaitlistList = z.output; export const RemoveGroupWaitlistEntryResultSchema = z.object({ deleted: z.boolean(), }); export type RemoveGroupWaitlistEntryResult = z.output;