refactor: update Zod schemas to v4

This commit is contained in:
2026-05-11 18:59:30 +02:00
parent f5c759fc3a
commit fd18692110
8 changed files with 60 additions and 25 deletions
+9 -3
View File
@@ -2,8 +2,12 @@ import { z } from "zod"
export const assetSchema = z.object({
id: z.string().optional(),
itemId: z.string().min(1, { message: "Item is required" }),
serialNumber: z.string().min(1, { message: "Serial number is required" }),
itemId: z.string().min(1, {
error: "Item is required"
}),
serialNumber: z.string().min(1, {
error: "Serial number is required"
}),
deliveryNote: z.string().optional(),
notes: z.string().optional(),
recipientId: z.string().optional(),
@@ -16,7 +20,9 @@ export const createAssetSchema = assetSchema.extend({
export type CreateAssetFormType = z.infer<typeof createAssetSchema>
export const updateAssetSchema = assetSchema.extend({
id: z.string().min(1, { message: "ID is required" }),
id: z.string().min(1, {
error: "ID is required"
}),
status: z.enum(["AVAILABLE", "ASSIGNED", "RESERVED", "IN_REPAIR"]),
})
+13 -5
View File
@@ -6,11 +6,17 @@ export const assignmentSchema = z.object({
.number()
.int()
.nonnegative()
.min(1, { message: "Quantity is required" }),
.min(1, {
error: "Quantity is required"
}),
notes: z.string().optional(),
itemId: z.string().min(1, { message: "Item is required" }).optional(),
itemId: z.string().min(1, {
error: "Item is required"
}).optional(),
assetId: z.string().optional(),
recipientId: z.string().min(1, { message: "Recipient is required" }),
recipientId: z.string().min(1, {
error: "Recipient is required"
}),
assignmentDate: z.date().optional(),
returnDate: z.date().optional(),
})
@@ -28,7 +34,7 @@ export const updateAssignmentSchema = assignmentSchema
.superRefine((data, ctx) => {
if (data.itemId && !data.assetId) {
ctx.addIssue({
code: z.ZodIssueCode.custom,
code: "custom",
message: "Asset ID is required when item ID is provided",
path: ["assetId"],
})
@@ -38,6 +44,8 @@ export const updateAssignmentSchema = assignmentSchema
export type UpdateAssignmentFormType = z.infer<typeof updateAssignmentSchema>
export const returnAssignmentSchema = z.object({
id: z.string().min(1, { message: "Assignment ID is required" }),
id: z.string().min(1, {
error: "Assignment ID is required"
}),
})
export type ReturnAssignmentFormType = z.infer<typeof returnAssignmentSchema>
+6 -2
View File
@@ -3,11 +3,15 @@ import { z } from "zod"
export const signInSchema = z.object({
username: z
.string()
.min(1, { message: "Invalid username" })
.min(1, {
error: "Invalid username"
})
.nonempty("Username is required"),
password: z
.string()
.min(3, { message: "Password is too short" })
.min(3, {
error: "Password is too short"
})
.nonempty("Password is required"),
})
+1 -1
View File
@@ -4,7 +4,7 @@ export const createCategorySchema = z.object({
name: z
.string()
.min(3, {
message: "Name is required and must be at least 3 characters long",
error: "Name is required and must be at least 3 characters long"
})
.nonempty("Name is required and must be at least 3 characters long"),
})
+2 -3
View File
@@ -3,10 +3,9 @@ import { z } from "zod"
const ACCEPTED_MIME_TYPES = ["text/csv", "text/comma-separated-values"]
export const importSchema = z.object({
file: z
.instanceof(File)
file: z.file()
.refine((file) => ACCEPTED_MIME_TYPES.includes(file.type), {
message: "File must be a CSV",
error: "File must be a CSV"
}),
categoryId: z.string().optional(),
})
+15 -5
View File
@@ -1,25 +1,35 @@
import { z } from "zod"
export const createItemSchema = z.object({
name: z.string().min(1, { message: "Name is required" }),
categoryId: z.string().min(1, { message: "Category is required" }),
name: z.string().min(1, {
error: "Name is required"
}),
categoryId: z.string().min(1, {
error: "Category is required"
}),
stock: z.coerce
.number()
.int()
.nonnegative()
.min(0, { message: "Stock is required" }),
.min(0, {
error: "Stock is required"
}),
})
export type CreateItemFormType = z.infer<typeof createItemSchema>
export const updateItemSchema = createItemSchema.extend({
id: z.string().min(1, { message: "Item is required" }),
id: z.string().min(1, {
error: "Item is required"
}),
})
export type UpdateItemFormType = z.infer<typeof updateItemSchema>
export const getItemByIdSchema = z.object({
id: z.string().min(1, { message: "Item is required" }),
id: z.string().min(1, {
error: "Item is required"
}),
})
export type GetItemByIdFormType = z.infer<typeof getItemByIdSchema>
+3 -1
View File
@@ -6,7 +6,9 @@ export const movementSchema = z.object({
.number()
.int()
.nonnegative()
.min(1, { message: "Quantity is required" }),
.min(1, {
error: "Quantity is required"
}),
details: z.string().optional(),
notes: z.string().optional(),
itemId: z.string().optional(),
+11 -5
View File
@@ -4,10 +4,16 @@ export const recipientSchema = z.object({
id: z.string().optional(),
username: z
.string()
.min(1, { message: "Username is required" })
.min(1, {
error: "Username is required"
})
.nonempty("Username is required"),
firstName: z.string().min(1, { message: "First name is required" }),
lastName: z.string().min(1, { message: "Last name is required" }),
firstName: z.string().min(1, {
error: "First name is required"
}),
lastName: z.string().min(1, {
error: "Last name is required"
}),
department: z.enum(
[
"IT",
@@ -20,7 +26,7 @@ export const recipientSchema = z.object({
"OTHER",
],
{
message: "Department is required",
error: "Department is required"
},
),
email: z.string().optional().nullable(),
@@ -31,7 +37,7 @@ export const createRecipientSchema = recipientSchema.superRefine(
(data, ctx) => {
if (data.email && !z.string().email().safeParse(data.email).success) {
ctx.addIssue({
code: z.ZodIssueCode.custom,
code: "custom",
message: "Email format is invalid",
path: ["email"],
})