Skip to content

Commit 4ef56f9

Browse files
authored
Merge pull request #24 from akirachix/develop
Develop
2 parents 7a2a188 + 9d5b4bf commit 4ef56f9

File tree

1 file changed

+31
-11
lines changed

1 file changed

+31
-11
lines changed

api/serializers.py

Lines changed: 31 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ class UserSerializer(serializers.ModelSerializer):
1515
password = serializers.CharField(write_only=True, required=False)
1616
image = serializers.ImageField(required=False, allow_null=True)
1717
device_id = serializers.CharField(required=False, allow_blank=True)
18-
1918
class Meta:
2019
model = User
2120
fields = [
@@ -25,20 +24,19 @@ class Meta:
2524
read_only_fields = ["id", "date_joined"]
2625

2726
def validate(self, attrs):
28-
user_type = attrs.get('user_type')
29-
device_id = attrs.get('device_id')
30-
27+
user_type = attrs.get('user_type', self.instance.user_type if self.instance else None)
28+
device_id_str = attrs.get('device_id', self.instance.device_id.device_id if self.instance and self.instance.device_id else None)
3129

32-
if user_type == 'Farmer' and (not device_id or device_id.strip() == ''):
30+
if user_type == 'Farmer' and (not device_id_str or device_id_str.strip() == ''):
3331
raise serializers.ValidationError({
3432
'device_id': 'This field is required for Farmer users.'
3533
})
3634

37-
if device_id and not MCU.objects.filter(device_id=device_id).exists():
35+
if device_id_str and not MCU.objects.filter(device_id=device_id_str).exists():
3836
raise serializers.ValidationError({
39-
'device_id': f"The device ID '{device_id}' does not exist."
37+
'device_id': f"The device ID '{device_id_str}' does not exist."
4038
})
41-
39+
4240
return attrs
4341

4442
def create(self, validated_data):
@@ -72,6 +70,28 @@ def create(self, validated_data):
7270
return user
7371

7472

73+
def update(self, instance, validated_data):
74+
password = validated_data.pop("password", None)
75+
if password:
76+
instance.set_password(password)
77+
78+
device_id_str = validated_data.pop('device_id', None)
79+
if device_id_str:
80+
instance.device_id = MCU.objects.get(device_id=device_id_str)
81+
elif device_id_str is not None:
82+
instance.device_id = None
83+
elif 'device_id' not in self.initial_data:
84+
pass
85+
else:
86+
instance.device_id = None
87+
88+
for attr, value in validated_data.items():
89+
setattr(instance, attr, value)
90+
91+
instance.save()
92+
return instance
93+
94+
7595
class SignupSerializer(serializers.ModelSerializer):
7696
username = serializers.CharField(
7797
validators=[UniqueValidator(queryset=User.objects.all(), message="Username already taken.")]
@@ -190,7 +210,7 @@ def validate_email(self, value):
190210
otp = random.randint(1000, 9999)
191211
cache.set(f"otp_{user.id}", otp, timeout=600)
192212
return value
193-
213+
194214
class VerifyCodeSerializer(serializers.Serializer):
195215
email = serializers.EmailField()
196216
otp = serializers.CharField(max_length=4)
@@ -204,7 +224,7 @@ def validate(self, data):
204224
raise serializers.ValidationError("Invalid or expired OTP")
205225
cache.set(f"otp_verified_{user.id}", True, timeout=600)
206226
return data
207-
227+
208228
class ResetPasswordSerializer(serializers.Serializer):
209229
email = serializers.EmailField()
210230
password = serializers.CharField(write_only=True, min_length=8)
@@ -224,7 +244,7 @@ def save(self, **kwargs):
224244
cache.delete(f"otp_{user.id}")
225245
cache.delete(f"otp_verified_{user.id}")
226246
return user
227-
247+
228248
class ThresholdSerializer(serializers.ModelSerializer):
229249
class Meta:
230250
model = MCU

0 commit comments

Comments
 (0)