Louis Mazin 5a56f5383d init
2026-09-13 18:56:33 +02:00

47 lines
1.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from django.contrib.auth.models import User
from django.db import transaction
from django.utils import timezone
from rest_framework import serializers
from .models import Invitation
class UserSerializer(serializers.ModelSerializer):
is_admin = serializers.SerializerMethodField()
class Meta:
model = User
fields = ['id', 'username', 'email', 'first_name', 'last_name', 'is_admin', 'date_joined']
def get_is_admin(self, obj):
return obj.is_superuser or obj.is_staff
class RegisterSerializer(serializers.ModelSerializer):
password = serializers.CharField(write_only=True)
invite = serializers.UUIDField(write_only=True)
class Meta:
model = User
fields = ['username', 'password', 'email', 'first_name', 'last_name', 'invite']
def validate_invite(self, value):
try:
invitation = Invitation.objects.get(token=value)
except Invitation.DoesNotExist as error:
raise serializers.ValidationError('Ce lien dinvitation est invalide.') from error
if not invitation.is_valid:
raise serializers.ValidationError('Ce lien dinvitation est expire ou deja utilise.')
return value
def create(self, validated_data):
invitation_token = validated_data.pop('invite')
with transaction.atomic():
invitation = Invitation.objects.select_for_update().get(token=invitation_token)
if not invitation.is_valid:
raise serializers.ValidationError({'invite': 'Ce lien dinvitation est expire ou deja utilise.'})
user = User.objects.create_user(**validated_data)
invitation.used_at = timezone.now()
invitation.save(update_fields=['used_at'])
return user