diff --git a/lib/validation-schemas.ts b/lib/validation-schemas.ts index a9eac6d..5792821 100644 --- a/lib/validation-schemas.ts +++ b/lib/validation-schemas.ts @@ -80,28 +80,25 @@ export const customAmountSchema = z // Schema completo para criação de doação export const createDonationSchema = z - .object({ - tier: donationTierSchema, - anonymous: z.boolean().optional().default(false), - customAmount: z.number().optional(), - }) - .and( - z.union([ - // Doação anônima - não precisa de dados pessoais - z.object({ - anonymous: z.literal(true), - }), - // Doação identificada - precisa de todos os dados - z.object({ - anonymous: z.literal(false), - donorName: nameSchema, - donorEmail: emailSchema, - donorPhone: phoneSchema, - donorTaxId: documentSchema, - donorMessage: messageSchema, - }), - ]) - ) + .discriminatedUnion("anonymous", [ + // Doação anônima + z.object({ + tier: donationTierSchema, + anonymous: z.literal(true), + customAmount: z.number().optional(), + }), + // Doação identificada + z.object({ + tier: donationTierSchema, + anonymous: z.literal(false), + donorName: nameSchema, + donorEmail: emailSchema, + donorPhone: phoneSchema, + donorTaxId: documentSchema, + donorMessage: messageSchema, + customAmount: z.number().optional(), + }), + ]) .refine( (data) => { // Se tier for custom, customAmount é obrigatório