Files
crm-server/src/validators/crm.validators.js
2025-11-21 13:56:02 +01:00

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())),
});