import { z } from 'zod'; // Login s temporary password schema export const loginSchema = z.object({ username: z .string({ required_error: 'Username je povinný', invalid_type_error: 'Username musí byť text', }) .min(3, 'Username musí mať aspoň 3 znaky') .max(50, 'Username môže mať maximálne 50 znakov'), password: z .string({ required_error: 'Heslo je povinné', invalid_type_error: 'Heslo musí byť text', }) .min(1, 'Heslo nemôže byť prázdne'), }); // Set new password schema (krok 2) export const setPasswordSchema = z .object({ newPassword: z .string({ required_error: 'Nové heslo je povinné', }) .min(8, 'Heslo musí mať aspoň 8 znakov') .max(100, 'Heslo môže mať maximálne 100 znakov') .regex(/[a-z]/, 'Heslo musí obsahovať aspoň jedno malé písmeno') .regex(/[A-Z]/, 'Heslo musí obsahovať aspoň jedno veľké písmeno') .regex(/[0-9]/, 'Heslo musí obsahovať aspoň jedno číslo') .regex( /[^a-zA-Z0-9]/, 'Heslo musí obsahovať aspoň jeden špeciálny znak' ), confirmPassword: z.string({ required_error: 'Potvrdenie hesla je povinné', }), }) .refine((data) => data.newPassword === data.confirmPassword, { message: 'Heslá sa nezhodujú', path: ['confirmPassword'], }); // Link email schema (krok 3) export const linkEmailSchema = z.object({ email: z .string({ required_error: 'Email je povinný', }) .email('Neplatný formát emailu') .max(255, 'Email môže mať maximálne 255 znakov'), emailPassword: z .string({ required_error: 'Heslo k emailu je povinné', }) .min(1, 'Heslo k emailu nemôže byť prázdne'), }); // Create user schema (admin only) - temp password sa generuje automaticky // Ak je poskytnutý email, môže byť poskytnuté aj emailPassword pre automatické nastavenie JMAP export const createUserSchema = z.object({ username: z .string({ required_error: 'Username je povinný', }) .min(3, 'Username musí mať aspoň 3 znaky') .max(50, 'Username môže mať maximálne 50 znakov') .regex( /^[a-zA-Z0-9_-]+$/, 'Username môže obsahovať iba písmená, čísla, pomlčky a podčiarkovníky' ), email: z.string().email('Neplatný formát emailu').max(255).optional(), emailPassword: z.string().min(1).optional(), firstName: z.string().max(100).optional(), lastName: z.string().max(100).optional(), role: z.enum(['admin', 'member']).optional(), }); // Update user schema export const updateUserSchema = z.object({ firstName: z.string().max(100).optional(), lastName: z.string().max(100).optional(), email: z.string().email('Neplatný formát emailu').max(255).optional(), }); // Change role schema (admin only) export const changeRoleSchema = z.object({ userId: z.string().uuid('Neplatný formát user ID'), role: z.enum(['admin', 'member'], { required_error: 'Rola je povinná', invalid_type_error: 'Neplatná rola', }), });