From 55e808e15abca655be5625d26d5db46683fc6b75 Mon Sep 17 00:00:00 2001 From: mortezaei Date: Mon, 22 Sep 2025 16:54:13 +0330 Subject: [PATCH] fix(account): make device_id optional in user registration and update user verification logic - Changed device_id field in UserRegisterSerializer to be optional. - Updated UserVerifyView to handle device_id more gracefully, allowing for None values and adjusting user creation logic accordingly. --- apps/account/serializers/user.py | 4 ++-- apps/account/views/user.py | 16 ++++++++++++---- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/apps/account/serializers/user.py b/apps/account/serializers/user.py index 8fe61f8..35634a2 100644 --- a/apps/account/serializers/user.py +++ b/apps/account/serializers/user.py @@ -42,7 +42,7 @@ class UserProfileSerializer(serializers.ModelSerializer): class UserRegisterSerializer(serializers.ModelSerializer): fcm = serializers.CharField(required=False) - device_id = serializers.CharField(required=True) + device_id = serializers.CharField(required=False) email = serializers.EmailField() class Meta: @@ -51,7 +51,7 @@ class UserRegisterSerializer(serializers.ModelSerializer): extra_kwargs = { 'fullname': {'required': True,}, 'email': {'required': True,}, - 'device_id': {'required': True,}, + 'device_id': {'required': False,}, } def validate_email(self, value): diff --git a/apps/account/views/user.py b/apps/account/views/user.py index 7088d6f..cf17cb0 100644 --- a/apps/account/views/user.py +++ b/apps/account/views/user.py @@ -177,7 +177,7 @@ class UserVerifyView(CreateAPIView): code = self.valied_code(data['code'], verify_data['code']) del verify_data['code'] user = self.perform_create( - email=serializer.data['email'], device_id=serializer.data['device_id'], **verify_data + email=serializer.data['email'], device_id=serializer.data.get('device_id'), **verify_data ) token, _ = Token.objects.get_or_create(user=user) return Response(data={ @@ -205,17 +205,25 @@ class UserVerifyView(CreateAPIView): if kwargs['password']: user.is_active = True user.deletion_date = None - user.device_id = device_id + if device_id: + user.device_id = device_id user.last_login = timezone.now() user.save() else: - user = User.objects.filter(device_id=device_id, email__isnull=True).first() + # If device_id is provided, try to find existing user with that device_id + if device_id: + user = User.objects.filter(device_id=device_id, email__isnull=True).first() + else: + user = None + if not user: user = User.objects.create(**kwargs) else: user.email = email user.fullname = kwargs['fullname'] - user.device_id = device_id + + if device_id: + user.device_id = device_id user.last_login = timezone.now() user.is_active = True user.save()