initialize git, basic setup for crm

This commit is contained in:
richardtekula
2025-11-18 13:53:28 +01:00
commit da01d586fc
47 changed files with 12776 additions and 0 deletions

View File

@@ -0,0 +1,100 @@
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)
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'
),
tempPassword: z
.string({
required_error: 'Dočasné heslo je povinné',
})
.min(8, 'Dočasné heslo musí mať aspoň 8 znakov'),
role: z.enum(['admin', 'member'], {
required_error: 'Rola je povinná',
invalid_type_error: 'Neplatná rola',
}),
firstName: z.string().max(100).optional(),
lastName: z.string().max(100).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',
}),
});