feat(commissions): add customer records and kanban workflow baseline
This commit is contained in:
40
packages/content/src/commissions.ts
Normal file
40
packages/content/src/commissions.ts
Normal file
@@ -0,0 +1,40 @@
|
||||
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 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 UpdateCommissionStatusInput = z.infer<typeof updateCommissionStatusInputSchema>
|
||||
Reference in New Issue
Block a user