Files
consumocuidado-server/core/serializers.py
2021-02-04 12:16:47 +01:00

99 lines
3.2 KiB
Python

from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
from rest_framework import serializers
from . import models
class CustomTokenObtainPairSerializer(TokenObtainPairSerializer):
def validate(self, attrs):
# The default result (access/refresh tokens)
data = super(CustomTokenObtainPairSerializer, self).validate(attrs)
# Add extra responses here
data['user'] = {}
data['user']['id'] = self.user.id
data['user']['email'] = self.user.email
data['user']['role'] = self.user.role
return data
class CustomUserSerializer(serializers.ModelSerializer):
password = serializers.CharField(write_only=True, required=True, style={'input_type': 'password'})
class Meta:
model = models.CustomUser
fields = ('id', 'email', 'full_name', 'role', 'password', 'is_active', 'notify')
class CustomUserAdminSerializer(serializers.ModelSerializer):
password = serializers.CharField(write_only=True, required=False, style={'input_type': 'password'})
class Meta:
model = models.CustomUser
fields = ('id', 'email', 'full_name', 'role', 'password', 'is_active', 'notify')
def update(self, instance, validated_data):
for key, value in validated_data.items():
instance.__dict__[key] = value
if 'password' in validated_data:
instance.set_password(validated_data['password'])
instance.save()
return instance
class CreatorSerializer(serializers.ModelSerializer):
class Meta:
model = models.CustomUser
fields = ('email',)
class ChangePasswordSerializer(serializers.ModelSerializer):
password = serializers.CharField(write_only=True, required=True)
password2 = serializers.CharField(write_only=True, required=True)
old_password = serializers.CharField(write_only=True, required=True)
class Meta:
model = models.CustomUser
fields = ('old_password', 'password', 'password2')
def validate(self, attrs):
if attrs['password'] != attrs['password2']:
raise serializers.ValidationError({"password": "Password fields didn't match."})
return attrs
def validate_old_password(self, value):
user = self.context['request'].user
if not user.check_password(value):
raise serializers.ValidationError({"old_password": "Old password is not correct"})
return value
def update(self, instance, validated_data):
instance.set_password(validated_data['password'])
instance.save()
return instance
class UpdateUserSerializer(serializers.ModelSerializer):
email = serializers.EmailField(required=True)
class Meta:
model = models.CustomUser
fields = ('full_name', 'email')
def validate_email(self, value):
user = self.context['request'].user
if models.CustomUser.objects.exclude(pk=user.pk).filter(email=value).exists():
raise serializers.ValidationError({"email": "This email is already in use."})
return value
def update(self, instance, validated_data):
for key, value in validated_data.items():
instance.__dict__[key] = value
instance.save()
return instance