import { z } from "zod"; import { PASSWORD_RULES } from "@/features/auth/constants"; const passwordSchema = z .string() .min(PASSWORD_RULES.MIN_LENGTH, { message: `비밀번호는 최소 ${PASSWORD_RULES.MIN_LENGTH}자 이상이어야 합니다.`, }) .regex(/[A-Z]/, { message: "대문자를 최소 1개 이상 포함해야 합니다.", }) .regex(/[a-z]/, { message: "소문자를 최소 1개 이상 포함해야 합니다.", }) .regex(/[0-9]/, { message: "숫자를 최소 1개 이상 포함해야 합니다.", }) .regex(/[!@#$%^&*(),.?":{}|<>]/, { message: "특수문자를 최소 1개 이상 포함해야 합니다.", }); export const signupSchema = z .object({ email: z .string() .min(1, { message: "이메일을 입력해 주세요." }) .email({ message: "유효한 이메일 형식이 아닙니다." }), password: passwordSchema, confirmPassword: z .string() .min(1, { message: "비밀번호 확인을 입력해 주세요." }), }) .refine((data) => data.password === data.confirmPassword, { message: "비밀번호가 일치하지 않습니다.", path: ["confirmPassword"], }); export const resetPasswordSchema = z .object({ password: passwordSchema, confirmPassword: z .string() .min(1, { message: "비밀번호 확인을 입력해 주세요." }), }) .refine((data) => data.password === data.confirmPassword, { message: "비밀번호가 일치하지 않습니다.", path: ["confirmPassword"], }); export const loginSchema = z.object({ email: z .string() .min(1, { message: "이메일을 입력해 주세요." }) .email({ message: "유효한 이메일 형식이 아닙니다." }), password: z.string().min(1, { message: "비밀번호를 입력해 주세요." }), rememberMe: z.boolean().optional(), }); export const forgotPasswordSchema = z.object({ email: z .string() .min(1, { message: "이메일을 입력해 주세요." }) .email({ message: "유효한 이메일 형식이 아닙니다." }), }); export type SignupFormData = z.infer; export type ResetPasswordFormData = z.infer; export type LoginFormData = z.infer; export type ForgotPasswordFormData = z.infer;