1
0
Code Issues Pull Requests Actions Packages Projects Releases Wiki Activity Security Code Quality
Files
cosmos-prototype-application/src/schemas/user.schema.ts
2025-07-07 11:58:25 +07:00

42 lines
1.5 KiB
TypeScript

import { z } from "zod";
export const userFormSchema = z.object({
username: z.string().min(1, "Username is required").min(3, "Username must be at least 3 characters"),
email: z.string().email("Invalid email address"),
firstName: z.string().min(1, "First name is required"),
lastName: z.string().min(1, "Last name is required"),
password: z.string().min(6, "Password must be at least 6 characters"),
confirmPassword: z.string().min(6, "Confirm password must be at least 6 characters"),
}).refine((data) => data.password === data.confirmPassword, {
message: "Passwords don't match",
path: ["confirmPassword"],
});
export const userEditFormSchema = z.object({
username: z.string().min(1, "Username is required").min(3, "Username must be at least 3 characters"),
email: z.string().email("Invalid email address"),
firstName: z.string().min(1, "First name is required"),
lastName: z.string().min(1, "Last name is required"),
password: z.string().optional(),
confirmPassword: z.string().optional(),
}).refine((data) => {
if (data.password && data.password.length > 0) {
return data.password.length >= 6;
}
return true;
}, {
message: "Password must be at least 6 characters",
path: ["password"],
}).refine((data) => {
if (data.password && data.password.length > 0) {
return data.password === data.confirmPassword;
}
return true;
}, {
message: "Passwords don't match",
path: ["confirmPassword"],
});
export type UserForm = z.infer<typeof userFormSchema>;
export type UserEditForm = z.infer<typeof userEditFormSchema>;