/** * Form Validation Schemas * Using Zod for type-safe validation */ import { z } from "zod" /** * Login form validation schema */ export const loginSchema = z.object({ email: z .string() .email("Adresse email invalide") .min(1, "Email requis"), password: z .string() .min(1, "Mot de passe requis") .min(6, "Le mot de passe doit contenir au moins 6 caractères"), }) export type LoginFormData = z.infer /** * Registration form validation schema */ export const registerSchema = z.object({ firstName: z .string() .min(1, "Prénom requis") .max(50, "Le prénom ne doit pas dépasser 50 caractères"), lastName: z .string() .min(1, "Nom requis") .max(50, "Le nom ne doit pas dépasser 50 caractères"), email: z .string() .email("Adresse email invalide"), citizenId: z .string() .min(1, "Numéro de citoyen requis") .max(20, "Le numéro de citoyen ne doit pas dépasser 20 caractères"), password: z .string() .min(6, "Le mot de passe doit contenir au moins 6 caractères"), passwordConfirm: z .string() .min(1, "Confirmation du mot de passe requise"), }).refine( (data) => data.password === data.passwordConfirm, { message: "Les mots de passe ne correspondent pas", path: ["passwordConfirm"], } ) export type RegisterFormData = z.infer /** * Vote submission validation schema */ export const voteSubmissionSchema = z.object({ electionId: z .number() .min(1, "Élection requise"), choix: z .string() .min(1, "Candidat requis"), }) export type VoteSubmissionFormData = z.infer