Coverage for users\serializers\base_user.py: 45%
22 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érialiseur pour le modèle utilisateur personnalisé.
4Ce module définit la sérialisation/désérialisation des objets User
5pour l'API REST, avec gestion sécurisée des mots de passe.
6"""
8from rest_framework import serializers
9from users.models.base_user import User
12class UserSerializer(serializers.ModelSerializer):
13 """
14 Sérialiseur pour le modèle User.
16 :ivar id: Identifiant unique de l'utilisateur (lecture seule)
17 :vartype id: int
18 :ivar email: Adresse email unique
19 :vartype email: str
20 :ivar password: Mot de passe en clair pour création/mise à jour (écriture seule)
21 :vartype password: str
22 :ivar role: Rôle de l'utilisateur (client, employe, admin)
23 :vartype role: str
24 """
25 password = serializers.CharField(write_only=True, required=True, min_length=8)
27 class Meta:
28 model = User
29 fields = ['id', 'email', 'password', 'role', 'is_active', 'date_joined']
30 read_only_fields = ['id']
32 def create(self, validated_data):
33 """
34 Crée un nouvel utilisateur avec mot de passe sécurisé.
36 :param validated_data: Données validées du serializer
37 :type validated_data: dict
38 :return: Instance User créée
39 :rtype: User
40 """
41 password = validated_data.pop('password')
42 user = User.objects.create_user(**validated_data)
43 user.set_password(password)
44 user.save()
45 return user
47 def update(self, instance, validated_data):
48 """
49 Met à jour un utilisateur existant et modifie le mot de passe si fourni.
51 :param instance: Instance User à mettre à jour
52 :type instance: User
53 :param validated_data: Données validées du serializer
54 :type validated_data: dict
55 :return: Instance User mise à jour
56 :rtype: User
57 """
58 password = validated_data.pop('password', None)
59 for attr, value in validated_data.items():
60 setattr(instance, attr, value)
61 if password:
62 instance.set_password(password)
63 instance.save()
64 return instance