Commit iniziale
This commit is contained in:
@@ -0,0 +1,115 @@
|
||||
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<typeof loginSchema>
|
||||
export type RegisterInput = z.infer<typeof registerSchema>
|
||||
export type ProductTypeInput = z.infer<typeof productTypeSchema>
|
||||
export type ProductInput = z.infer<typeof productSchema>
|
||||
export type CategoryInput = z.infer<typeof categorySchema>
|
||||
export type ReviewInput = z.infer<typeof reviewSchema>
|
||||
export type CheckoutInput = z.infer<typeof checkoutSchema>
|
||||
Reference in New Issue
Block a user