feat: add Zod validation schemas for all domain routes

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
BOHA
2026-03-23 08:57:38 +01:00
parent a4303b0188
commit d2b22e9399
32 changed files with 819 additions and 140 deletions

View File

@@ -0,0 +1,58 @@
import { z } from 'zod';
const InvoiceItemSchema = z.object({
description: z.string().nullish(),
quantity: z.number().optional().default(1),
unit: z.string().nullish(),
unit_price: z.number().optional().default(0),
vat_rate: z.number().optional().default(21.0),
position: z.number().optional(),
});
export const CreateInvoiceSchema = z.object({
invoice_number: z.string().nullish(),
order_id: z.union([z.number(), z.string()]).transform(v => Number(v)).nullish(),
customer_id: z.union([z.number(), z.string()]).transform(v => Number(v)).nullish(),
status: z.string().optional().default('issued'),
currency: z.string().optional().default('CZK'),
vat_rate: z.union([z.number(), z.string()]).transform(v => Number(v)).optional().default(21.0),
apply_vat: z.any().optional().default(true),
payment_method: z.string().nullish(),
constant_symbol: z.string().nullish(),
bank_name: z.string().nullish(),
bank_swift: z.string().nullish(),
bank_iban: z.string().nullish(),
bank_account: z.string().nullish(),
issue_date: z.string().nullish(),
due_date: z.string().nullish(),
tax_date: z.string().nullish(),
issued_by: z.string().nullish(),
notes: z.string().nullish(),
internal_notes: z.string().nullish(),
items: z.array(InvoiceItemSchema).optional(),
});
export const UpdateInvoiceSchema = z.object({
status: z.string().optional(),
currency: z.string().optional(),
payment_method: z.string().nullish(),
constant_symbol: z.string().nullish(),
bank_name: z.string().nullish(),
bank_swift: z.string().nullish(),
bank_iban: z.string().nullish(),
bank_account: z.string().nullish(),
issued_by: z.string().nullish(),
customer_id: z.union([z.number(), z.string(), z.null()]).optional(),
vat_rate: z.union([z.number(), z.string()]).transform(v => Number(v)).optional(),
apply_vat: z.any().optional(),
issue_date: z.union([z.string(), z.null()]).optional(),
due_date: z.union([z.string(), z.null()]).optional(),
tax_date: z.union([z.string(), z.null()]).optional(),
notes: z.string().nullish(),
internal_notes: z.string().nullish(),
paid_date: z.union([z.string(), z.null()]).optional(),
items: z.array(InvoiceItemSchema).optional(),
});
export type CreateInvoiceInput = z.infer<typeof CreateInvoiceSchema>;
export type UpdateInvoiceInput = z.infer<typeof UpdateInvoiceSchema>;