Merge pull request #2 from evandrodevbr:develop
refactor(validation): refactor createDonationSchema to use discriminatedUnion
This commit is contained in:
1 file changed
+19
-22
+19
-22
@@ -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
|
||||
|
||||
Reference in new issue
Block a user