changement

This commit is contained in:
Emma781227
2026-09-14 22:30:40 +02:00
parent 8a6355cde1
commit 2201446ee6
54 changed files with 2495 additions and 139 deletions

View File

@@ -1,10 +1,11 @@
const { z } = require("zod");
const { emailSchema } = require("./email.validation");
const createEmployeeSchema = z.object({
firstname: z.string().min(2),
lastname: z.string().min(2),
email: z.string().email(),
password: z.string().min(8),
// Pas de mot de passe : il est généré côté serveur (voir createEmployee).
email: emailSchema,
birthdate: z.string().optional(),
gender: z.string().optional(),
});

View File

@@ -1,17 +1,27 @@
const { z } = require("zod");
const { passwordSchema } = require("./password.validation");
const { emailSchema } = require("./email.validation");
const registerSchema = z.object({
firstname: z.string().min(2, "Le prénom doit contenir au moins 2 caractères"),
lastname: z.string().min(2, "Le nom doit contenir au moins 2 caractères"),
email: z.string().email("Email invalide"),
password: z.string().min(8, "Le mot de passe doit contenir au moins 8 caractères"),
birthdate: z.string().optional(),
gender: z.string().optional(),
marketingOptIn: z.boolean().optional(),
});
const registerSchema = z
.object({
firstname: z.string().min(2, "Le prénom doit contenir au moins 2 caractères"),
lastname: z.string().min(2, "Le nom doit contenir au moins 2 caractères"),
email: emailSchema,
password: passwordSchema,
// Vérifiée aussi côté serveur : le contrôle du navigateur ne protège pas
// un appel direct à l'API.
confirmPassword: z.string({ error: "Veuillez confirmer le mot de passe" }),
birthdate: z.string().optional(),
gender: z.string().optional(),
marketingOptIn: z.boolean().optional(),
})
.refine((data) => data.password === data.confirmPassword, {
message: "Les deux mots de passe ne correspondent pas",
path: ["confirmPassword"],
});
const loginSchema = z.object({
email: z.string().email("Email invalide"),
email: emailSchema,
password: z.string().min(1, "Mot de passe requis"),
});

View File

@@ -0,0 +1,11 @@
const { z } = require("zod");
// Les emails sont stockés et recherchés en minuscules, sans espaces autour :
// « Jean@Exemple.fr » et « jean@exemple.fr » désignent le même compte.
function normalizeEmail(email) {
return typeof email === "string" ? email.trim().toLowerCase() : email;
}
const emailSchema = z.string().trim().toLowerCase().email("Email invalide");
module.exports = { emailSchema, normalizeEmail };

View File

@@ -0,0 +1,21 @@
const { z } = require("zod");
// Règle de mot de passe, reprise à l'identique par le front
// (frontend/src/utils/passwordRules.js) : plus de 7 caractères et au moins un
// caractère spécial, c'est-à-dire ni lettre (accentuée comprise), ni chiffre,
// ni espace.
const SPECIAL_CHARACTER = /[^\p{L}\p{N}\s]/u;
const passwordSchema = z
.string()
.min(8, "Le mot de passe doit contenir au moins 8 caractères")
.regex(SPECIAL_CHARACTER, "Le mot de passe doit contenir au moins un caractère spécial");
// Pour les contrôleurs qui valident à la main : message de la première règle
// non respectée, ou null si le mot de passe est valide.
function passwordRuleError(password) {
const result = passwordSchema.safeParse(password ?? "");
return result.success ? null : `${result.error.issues[0].message}.`;
}
module.exports = { passwordSchema, passwordRuleError, SPECIAL_CHARACTER };