mirror of
https://github.com/marcogll/TaxHacker_s23.git
synced 2026-01-13 21:35:19 +00:00
feat: filters, settings, backups fix: ts compile errors feat: new dashboard, webp previews and settings feat: use webp for pdfs feat: use webp fix: analyze resets old data fix: switch to corsproxy fix: switch to free cors fix: max upload limit fix: currency conversion feat: transaction export fix: currency conversion feat: refactor settings actions feat: new loader feat: README + LICENSE doc: update readme doc: update readme doc: update readme doc: update screenshots ci: bump prisma
50 lines
1.5 KiB
TypeScript
50 lines
1.5 KiB
TypeScript
import { z } from "zod"
|
|
|
|
export const transactionFormSchema = z
|
|
.object({
|
|
name: z.string().max(128).optional(),
|
|
merchant: z.string().max(128).optional(),
|
|
description: z.string().max(256).optional(),
|
|
type: z.string().optional(),
|
|
total: z
|
|
.string()
|
|
.transform((val) => {
|
|
const num = parseFloat(val)
|
|
if (isNaN(num)) {
|
|
throw new z.ZodError([{ message: "Invalid total", path: ["total"], code: z.ZodIssueCode.custom }])
|
|
}
|
|
return Math.round(num * 100) // convert to cents
|
|
})
|
|
.optional(),
|
|
currencyCode: z.string().max(5).optional(),
|
|
convertedTotal: z
|
|
.string()
|
|
.transform((val) => {
|
|
const num = parseFloat(val)
|
|
if (isNaN(num)) {
|
|
throw new z.ZodError([
|
|
{ message: "Invalid coverted total", path: ["convertedTotal"], code: z.ZodIssueCode.custom },
|
|
])
|
|
}
|
|
return Math.round(num * 100) // convert to cents
|
|
})
|
|
.optional(),
|
|
convertedCurrencyCode: z.string().max(5).optional(),
|
|
categoryCode: z.string().optional(),
|
|
projectCode: z.string().optional(),
|
|
issuedAt: z
|
|
.union([
|
|
z.date(),
|
|
z
|
|
.string()
|
|
.refine((val) => !isNaN(Date.parse(val)), {
|
|
message: "Invalid date format",
|
|
})
|
|
.transform((val) => new Date(val)),
|
|
])
|
|
.optional(),
|
|
text: z.string().optional(),
|
|
note: z.string().optional(),
|
|
})
|
|
.catchall(z.string())
|