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:
58
src/schemas/invoices.schema.ts
Normal file
58
src/schemas/invoices.schema.ts
Normal 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>;
|
||||
Reference in New Issue
Block a user