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
+7 -10
+7 -10
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", [
// Doação anônima
z.object({
tier: donationTierSchema, 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), anonymous: z.literal(true),
customAmount: z.number().optional(),
}), }),
// Doação identificada - precisa de todos os dados // Doação identificada
z.object({ z.object({
tier: donationTierSchema,
anonymous: z.literal(false), anonymous: z.literal(false),
donorName: nameSchema, donorName: nameSchema,
donorEmail: emailSchema, donorEmail: emailSchema,
donorPhone: phoneSchema, donorPhone: phoneSchema,
donorTaxId: documentSchema, donorTaxId: documentSchema,
donorMessage: messageSchema, donorMessage: messageSchema,
customAmount: z.number().optional(),
}), }),
]) ])
)
.refine( .refine(
(data) => { (data) => {
// Se tier for custom, customAmount é obrigatório // Se tier for custom, customAmount é obrigatório