fix email issues, add company,project,todos
This commit is contained in:
107
src/validators/crm.validators.js
Normal file
107
src/validators/crm.validators.js
Normal file
@@ -0,0 +1,107 @@
|
||||
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())),
|
||||
});
|
||||
Reference in New Issue
Block a user