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
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