108 lines
5.0 KiB
JavaScript
108 lines
5.0 KiB
JavaScript
import { z } from 'zod';
|
|
|
|
// Company validators
|
|
export const createCompanySchema = z.object({
|
|
name: z
|
|
.string({
|
|
required_error: 'Názov firmy je povinný',
|
|
})
|
|
.min(1, 'Názov firmy nemôže byť prázdny')
|
|
.max(255, 'Názov firmy môže mať maximálne 255 znakov'),
|
|
description: z.string().max(1000).optional(),
|
|
address: z.string().max(255).optional(),
|
|
city: z.string().max(100).optional(),
|
|
country: z.string().max(100).optional(),
|
|
phone: z.string().max(50).optional(),
|
|
email: z.string().email('Neplatný formát emailu').max(255).optional().or(z.literal('')),
|
|
website: z.string().url('Neplatný formát URL').max(255).optional().or(z.literal('')),
|
|
});
|
|
|
|
export const updateCompanySchema = z.object({
|
|
name: z.string().min(1).max(255).optional(),
|
|
description: z.string().max(1000).optional(),
|
|
address: z.string().max(255).optional(),
|
|
city: z.string().max(100).optional(),
|
|
country: z.string().max(100).optional(),
|
|
phone: z.string().max(50).optional(),
|
|
email: z.string().email('Neplatný formát emailu').max(255).optional().or(z.literal('')),
|
|
website: z.string().url('Neplatný formát URL').max(255).optional().or(z.literal('')),
|
|
});
|
|
|
|
// Project validators
|
|
export const createProjectSchema = z.object({
|
|
name: z
|
|
.string({
|
|
required_error: 'Názov projektu je povinný',
|
|
})
|
|
.min(1, 'Názov projektu nemôže byť prázdny')
|
|
.max(255, 'Názov projektu môže mať maximálne 255 znakov'),
|
|
description: z.string().max(1000).optional(),
|
|
companyId: z.string().uuid('Neplatný formát company ID').optional().or(z.literal('')),
|
|
status: z.enum(['active', 'completed', 'on_hold', 'cancelled']).optional(),
|
|
startDate: z.string().optional().or(z.literal('')),
|
|
endDate: z.string().optional().or(z.literal('')),
|
|
});
|
|
|
|
export const updateProjectSchema = z.object({
|
|
name: z.string().min(1).max(255).optional(),
|
|
description: z.string().max(1000).optional(),
|
|
companyId: z.string().uuid('Neplatný formát company ID').optional().or(z.literal('').or(z.null())),
|
|
status: z.enum(['active', 'completed', 'on_hold', 'cancelled']).optional(),
|
|
startDate: z.string().optional().or(z.literal('').or(z.null())),
|
|
endDate: z.string().optional().or(z.literal('').or(z.null())),
|
|
});
|
|
|
|
// Todo validators
|
|
export const createTodoSchema = z.object({
|
|
title: z
|
|
.string({
|
|
required_error: 'Názov todo je povinný',
|
|
})
|
|
.min(1, 'Názov todo nemôže byť prázdny')
|
|
.max(255, 'Názov todo môže mať maximálne 255 znakov'),
|
|
description: z.string().max(1000).optional(),
|
|
projectId: z.string().uuid('Neplatný formát project ID').optional().or(z.literal('')),
|
|
companyId: z.string().uuid('Neplatný formát company ID').optional().or(z.literal('')),
|
|
assignedTo: z.string().uuid('Neplatný formát user ID').optional().or(z.literal('')),
|
|
status: z.enum(['pending', 'in_progress', 'completed', 'cancelled']).optional(),
|
|
priority: z.enum(['low', 'medium', 'high', 'urgent']).optional(),
|
|
dueDate: z.string().optional().or(z.literal('')),
|
|
});
|
|
|
|
export const updateTodoSchema = z.object({
|
|
title: z.string().min(1).max(255).optional(),
|
|
description: z.string().max(1000).optional(),
|
|
projectId: z.string().uuid('Neplatný formát project ID').optional().or(z.literal('').or(z.null())),
|
|
companyId: z.string().uuid('Neplatný formát company ID').optional().or(z.literal('').or(z.null())),
|
|
assignedTo: z.string().uuid('Neplatný formát user ID').optional().or(z.literal('').or(z.null())),
|
|
status: z.enum(['pending', 'in_progress', 'completed', 'cancelled']).optional(),
|
|
priority: z.enum(['low', 'medium', 'high', 'urgent']).optional(),
|
|
dueDate: z.string().optional().or(z.literal('').or(z.null())),
|
|
});
|
|
|
|
// Note validators
|
|
export const createNoteSchema = z.object({
|
|
title: z.string().max(255).optional(),
|
|
content: z
|
|
.string({
|
|
required_error: 'Obsah poznámky je povinný',
|
|
})
|
|
.min(1, 'Obsah poznámky nemôže byť prázdny')
|
|
.max(5000, 'Obsah poznámky môže mať maximálne 5000 znakov'),
|
|
companyId: z.string().uuid('Neplatný formát company ID').optional().or(z.literal('')),
|
|
projectId: z.string().uuid('Neplatný formát project ID').optional().or(z.literal('')),
|
|
todoId: z.string().uuid('Neplatný formát todo ID').optional().or(z.literal('')),
|
|
contactId: z.string().uuid('Neplatný formát contact ID').optional().or(z.literal('')),
|
|
reminderDate: z.string().optional().or(z.literal('')),
|
|
});
|
|
|
|
export const updateNoteSchema = z.object({
|
|
title: z.string().max(255).optional().or(z.literal('').or(z.null())),
|
|
content: z.string().min(1).max(5000).optional(),
|
|
companyId: z.string().uuid('Neplatný formát company ID').optional().or(z.literal('').or(z.null())),
|
|
projectId: z.string().uuid('Neplatný formát project ID').optional().or(z.literal('').or(z.null())),
|
|
todoId: z.string().uuid('Neplatný formát todo ID').optional().or(z.literal('').or(z.null())),
|
|
contactId: z.string().uuid('Neplatný formát contact ID').optional().or(z.literal('').or(z.null())),
|
|
reminderDate: z.string().optional().or(z.literal('').or(z.null())),
|
|
});
|