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
|
// 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
|
||||||
|
|||||||
Reference in new issue
Block a user