56 lines
2.3 KiB
TypeScript
56 lines
2.3 KiB
TypeScript
import { z } from 'zod';
|
|
|
|
const DISTRITOS_PT = [
|
|
'Aveiro', 'Beja', 'Braga', 'Bragança', 'Castelo Branco', 'Coimbra',
|
|
'Évora', 'Faro', 'Guarda', 'Leiria', 'Lisboa', 'Portalegre', 'Porto',
|
|
'Santarém', 'Setúbal', 'Viana do Castelo', 'Vila Real', 'Viseu',
|
|
'Açores', 'Madeira',
|
|
] as const;
|
|
|
|
export const loginSchema = z.object({
|
|
email: z.string().email('Email inválido.'),
|
|
password: z.string().min(1, 'Palavra-passe obrigatória.'),
|
|
});
|
|
|
|
export const registerSchema = z
|
|
.object({
|
|
name: z.string().min(2, 'Nome deve ter pelo menos 2 caracteres.').max(100),
|
|
email: z.string().email('Email inválido.'),
|
|
password: z.string()
|
|
.min(8, 'A palavra-passe deve ter pelo menos 8 caracteres.')
|
|
.regex(/[A-Z]/, 'Deve conter pelo menos uma letra maiúscula.')
|
|
.regex(/[0-9]/, 'Deve conter pelo menos um número.'),
|
|
confirmPassword: z.string(),
|
|
birthdate: z.string().refine((v) => !isNaN(new Date(v).getTime()), 'Data inválida.'),
|
|
district: z.enum(DISTRITOS_PT, { error: 'Selecciona um distrito válido.' }),
|
|
terms: z.literal(true, { error: 'Tens de aceitar os termos.' }),
|
|
})
|
|
.refine((d) => d.password === d.confirmPassword, {
|
|
message: 'As palavras-passe não coincidem.',
|
|
path: ['confirmPassword'],
|
|
});
|
|
|
|
export const forgotPasswordSchema = z.object({
|
|
email: z.string().email('Email inválido.'),
|
|
});
|
|
|
|
export const resetPasswordSchema = z
|
|
.object({
|
|
token: z.string().min(1),
|
|
password: z.string()
|
|
.min(8, 'A palavra-passe deve ter pelo menos 8 caracteres.')
|
|
.regex(/[A-Z]/, 'Deve conter pelo menos uma letra maiúscula.')
|
|
.regex(/[0-9]/, 'Deve conter pelo menos um número.'),
|
|
confirmPassword: z.string(),
|
|
})
|
|
.refine((d) => d.password === d.confirmPassword, {
|
|
message: 'As palavras-passe não coincidem.',
|
|
path: ['confirmPassword'],
|
|
});
|
|
|
|
export type LoginInput = z.infer<typeof loginSchema>;
|
|
export type RegisterInput = z.infer<typeof registerSchema>;
|
|
export type ForgotPasswordInput = z.infer<typeof forgotPasswordSchema>;
|
|
export type ResetPasswordInput = z.infer<typeof resetPasswordSchema>;
|
|
export const DISTRITOS = DISTRITOS_PT;
|