import { z } from 'zod' export const loginSchema = z.object({ email: z.string().email('Invalid email address'), password: z.string().min(1, 'Password is required'), }) export const registerSchema = z.object({ email: z.string().email('Invalid email address'), password: z .string() .min(12, 'Password must be at least 12 characters') .regex(/[A-Z]/, 'Password must contain at least one uppercase letter') .regex(/[a-z]/, 'Password must contain at least one lowercase letter') .regex(/[0-9]/, 'Password must contain at least one number') .regex(/[^A-Za-z0-9]/, 'Password must contain at least one symbol'), name: z.string().min(1, 'Name is required').max(100), }) export const changePasswordSchema = z.object({ currentPassword: z.string().min(1, 'Current password is required'), newPassword: z .string() .min(12, 'Password must be at least 12 characters') .regex(/[A-Z]/, 'Password must contain at least one uppercase letter') .regex(/[a-z]/, 'Password must contain at least one lowercase letter') .regex(/[0-9]/, 'Password must contain at least one number') .regex(/[^A-Za-z0-9]/, 'Password must contain at least one symbol'), }) export const productTypeSchema = z.object({ name: z.string().min(1, 'Name is required').max(100), slug: z .string() .min(1, 'Slug is required') .max(100) .regex(/^[a-z0-9-]+$/, 'Slug must contain only lowercase letters, numbers, and hyphens'), schema: z.record(z.any()), }) export const productSchema = z.object({ typeId: z.string().min(1, 'Product type is required'), title: z.string().min(1, 'Title is required').max(200), slug: z .string() .min(1, 'Slug is required') .max(200) .regex(/^[a-z0-9-]+$/, 'Slug must contain only lowercase letters, numbers, and hyphens'), description: z.string().min(1, 'Description is required'), basePrice: z.number().int().min(0, 'Price must be non-negative'), currency: z.string().length(3, 'Currency must be 3 characters'), status: z.enum(['DRAFT', 'PUBLISHED', 'ARCHIVED']), attributes: z.record(z.any()), stock: z.number().int().min(0).nullable().optional(), categoryIds: z.array(z.string()).optional(), }) export const categorySchema = z.object({ name: z.string().min(1, 'Name is required').max(100), slug: z .string() .min(1, 'Slug is required') .max(100) .regex(/^[a-z0-9-]+$/, 'Slug must contain only lowercase letters, numbers, and hyphens'), parentId: z.string().nullable().optional(), }) export const reviewSchema = z.object({ productId: z.string().min(1, 'Product ID is required'), rating: z.number().int().min(1).max(5), title: z.string().max(200).optional(), comment: z.string().max(2000).optional(), }) export const cartItemSchema = z.object({ productId: z.string().min(1), quantity: z.number().int().min(1).max(100), variantId: z.string().optional(), }) export const checkoutSchema = z.object({ items: z.array( z.object({ productId: z.string(), quantity: z.number().int().min(1), variantId: z.string().optional(), }) ).min(1, 'Cart is empty'), }) export const settingSchema = z.object({ key: z.string().min(1), value: z.any(), }) export const adminUserSchema = z.object({ email: z.string().email(), name: z.string().min(1).max(100), role: z.enum(['ADMIN', 'OWNER']), password: z .string() .min(12, 'Password must be at least 12 characters') .regex(/[A-Z]/, 'Password must contain at least one uppercase letter') .regex(/[a-z]/, 'Password must contain at least one lowercase letter') .regex(/[0-9]/, 'Password must contain at least one number') .regex(/[^A-Za-z0-9]/, 'Password must contain at least one symbol'), }) export type LoginInput = z.infer export type RegisterInput = z.infer export type ProductTypeInput = z.infer export type ProductInput = z.infer export type CategoryInput = z.infer export type ReviewInput = z.infer export type CheckoutInput = z.infer