Merge pull request #2 from evandrodevbr:develop

refactor(validation): refactor createDonationSchema to use discriminatedUnion
This commit is contained in:
Evandro Fonseca Junior authored and GitHub committed 2025-10-26 23:11:43 -03:00
commit d05fbe967e
1 file changed
+19 -22
+19 -22
View File
@@ -80,28 +80,25 @@ export const customAmountSchema = z
// Schema completo para criação de doação // Schema completo para criação de doação
export const createDonationSchema = z export const createDonationSchema = z
.object({ .discriminatedUnion("anonymous", [
tier: donationTierSchema, // Doação anônima
anonymous: z.boolean().optional().default(false), z.object({
customAmount: z.number().optional(), tier: donationTierSchema,
}) anonymous: z.literal(true),
.and( customAmount: z.number().optional(),
z.union([ }),
// Doação anônima - não precisa de dados pessoais // Doação identificada
z.object({ z.object({
anonymous: z.literal(true), tier: donationTierSchema,
}), anonymous: z.literal(false),
// Doação identificada - precisa de todos os dados donorName: nameSchema,
z.object({ donorEmail: emailSchema,
anonymous: z.literal(false), donorPhone: phoneSchema,
donorName: nameSchema, donorTaxId: documentSchema,
donorEmail: emailSchema, donorMessage: messageSchema,
donorPhone: phoneSchema, customAmount: z.number().optional(),
donorTaxId: documentSchema, }),
donorMessage: messageSchema, ])
}),
])
)
.refine( .refine(
(data) => { (data) => {
// Se tier for custom, customAmount é obrigatório // Se tier for custom, customAmount é obrigatório