64 lines
2.2 KiB
TypeScript
64 lines
2.2 KiB
TypeScript
import { z } from "zod"
|
|
|
|
export const commissionStatusSchema = z.enum([
|
|
"new",
|
|
"scoped",
|
|
"in_progress",
|
|
"review",
|
|
"done",
|
|
"canceled",
|
|
])
|
|
|
|
export const createCustomerInputSchema = z.object({
|
|
name: z.string().min(1).max(180),
|
|
email: z.string().email().max(320).nullable().optional(),
|
|
phone: z.string().max(80).nullable().optional(),
|
|
instagram: z.string().max(120).nullable().optional(),
|
|
notes: z.string().max(4000).nullable().optional(),
|
|
isRecurring: z.boolean().default(false),
|
|
})
|
|
|
|
export const createCommissionInputSchema = z.object({
|
|
title: z.string().min(1).max(180),
|
|
description: z.string().max(4000).nullable().optional(),
|
|
status: commissionStatusSchema.default("new"),
|
|
customerId: z.string().uuid().nullable().optional(),
|
|
assignedUserId: z.string().max(120).nullable().optional(),
|
|
budgetMin: z.number().nonnegative().nullable().optional(),
|
|
budgetMax: z.number().nonnegative().nullable().optional(),
|
|
dueAt: z.date().nullable().optional(),
|
|
})
|
|
|
|
export const createPublicCommissionRequestInputSchema = z
|
|
.object({
|
|
customerName: z.string().min(1).max(180),
|
|
customerEmail: z.string().email().max(320),
|
|
customerPhone: z.string().max(80).nullable().optional(),
|
|
customerInstagram: z.string().max(120).nullable().optional(),
|
|
title: z.string().min(1).max(180),
|
|
description: z.string().max(4000).nullable().optional(),
|
|
budgetMin: z.number().nonnegative().nullable().optional(),
|
|
budgetMax: z.number().nonnegative().nullable().optional(),
|
|
})
|
|
.refine(
|
|
(value) =>
|
|
value.budgetMin == null || value.budgetMax == null || value.budgetMax >= value.budgetMin,
|
|
{
|
|
message: "budgetMax must be greater than or equal to budgetMin.",
|
|
path: ["budgetMax"],
|
|
},
|
|
)
|
|
|
|
export const updateCommissionStatusInputSchema = z.object({
|
|
id: z.string().uuid(),
|
|
status: commissionStatusSchema,
|
|
})
|
|
|
|
export type CommissionStatus = z.infer<typeof commissionStatusSchema>
|
|
export type CreateCustomerInput = z.infer<typeof createCustomerInputSchema>
|
|
export type CreateCommissionInput = z.infer<typeof createCommissionInputSchema>
|
|
export type CreatePublicCommissionRequestInput = z.infer<
|
|
typeof createPublicCommissionRequestInputSchema
|
|
>
|
|
export type UpdateCommissionStatusInput = z.infer<typeof updateCommissionStatusInputSchema>
|