Coverage for authentication\serializers\employee.py: 100%
33 statements
« prev ^ index » next coverage.py v7.10.7, created at 2025-10-13 15:18 +0200
« prev ^ index » next coverage.py v7.10.7, created at 2025-10-13 15:18 +0200
1"""
2Sérialiseurs pour l'inscription des employés.
4Ce module contient les sérialiseurs nécessaires pour gérer l'inscription
5des employés avec validation des données et création automatique du profil.
7:module: users.serializers.employee_register
8"""
10from rest_framework import serializers
11from users.models.base_user import User
12from users.models.employe import EmployeProfile
13from django.contrib.auth.password_validation import validate_password
14from django.core.exceptions import ValidationError as DjangoValidationError
16class EmployeeRegisterSerializer(serializers.ModelSerializer):
17 """
18 Sérialiseur pour l'inscription des employés.
20 Gère l'inscription complète d'un employé avec création automatique
21 du profil utilisateur et validation de tous les champs requis.
23 :ivar email: Adresse email unique
24 :type email: str
25 :ivar password: Mot de passe (avec validation Django)
26 :type password: str
27 :ivar nom: Nom de famille
28 :type nom: str
29 :ivar prenom: Prénom
30 :type prenom: str
31 :ivar matricule: Numéro de matricule employé (unique)
32 :type matricule: str
33 :ivar identifiant_telephone: Identifiant téléphonique professionnel
34 :type identifiant_telephone: str
35 """
36 email = serializers.EmailField(write_only=True)
37 password = serializers.CharField(write_only=True)
38 nom = serializers.CharField(write_only=True)
39 prenom = serializers.CharField(write_only=True)
40 identifiant_telephone = serializers.CharField(write_only=True)
41 matricule = serializers.CharField(write_only=True)
43 class Meta:
44 """
45 Configuration du sérialiseur.
47 :cvar model: Modèle Django associé au sérialiseur
48 :type model: EmployeProfile
49 :cvar fields: Champs inclus dans la sérialisation
50 :type fields: list
51 """
52 model = EmployeProfile
53 fields = ['email', 'password', 'nom', 'prenom', 'matricule', 'identifiant_telephone']
55 def validate_email(self, value):
56 """
57 Valide l'unicité de l'adresse email.
59 :param value: L'adresse email à valider
60 :type value: str
61 :return: L'email validé
62 :rtype: str
63 :raises serializers.ValidationError: Si l'email est déjà utilisé
64 """
65 if User.objects.filter(email=value).exists():
66 raise serializers.ValidationError("Un utilisateur avec cet email existe déjà.")
67 return value
69 def create(self, validated_data):
70 """
71 Crée un nouvel utilisateur employé avec son profil.
73 Valide le mot de passe selon les règles Django et crée l'utilisateur
74 avec le rôle 'employe' ainsi que son profil associé.
76 :param validated_data: Les données validées
77 :type validated_data: dict
78 :return: Le profil employé créé
79 :rtype: EmployeProfile
80 :raises serializers.ValidationError: Si le mot de passe ne respecte pas les règles
81 """
82 email = validated_data.pop('email')
83 password = validated_data.pop('password')
84 nom = validated_data.pop('nom')
85 prenom = validated_data.pop('prenom')
86 matricule = validated_data.pop('matricule')
87 identifiant_telephone = validated_data.pop('identifiant_telephone')
89 try:
90 validate_password(password, user=User(email=email))
91 except DjangoValidationError as e:
92 raise serializers.ValidationError({'password': e.messages})
94 # Création du User avec role 'employe'
95 user = User.objects.create_user(
96 email=email,
97 password=password,
98 role='employe'
99 )
101 employe_profile = EmployeProfile.objects.create(
102 user=user,
103 nom=nom,
104 prenom=prenom,
105 matricule=matricule,
106 identifiant_telephone=identifiant_telephone
107 )
108 return employe_profile