79 lines
2.5 KiB
Python
79 lines
2.5 KiB
Python
from rest_framework import serializers
|
|
|
|
from account.models import User
|
|
from notification.models import Subscriber
|
|
|
|
|
|
class SubscriberSerializer(serializers.ModelSerializer):
|
|
email = serializers.CharField()
|
|
locale = serializers.CharField(allow_null=True)
|
|
country_code = serializers.CharField(allow_null=True)
|
|
|
|
class Meta:
|
|
model = Subscriber
|
|
fields = (
|
|
"email",
|
|
"locale",
|
|
"country_code"
|
|
)
|
|
|
|
def validate(self, data):
|
|
data["email"] = self.get_email(data)
|
|
data["locale"] = self.get_locale(data)
|
|
data["country_code"] = self.get_country_code(data)
|
|
return data
|
|
|
|
def create(self, validated_data):
|
|
inst, created = Subscriber.objects.get_or_create(**validated_data)
|
|
return inst
|
|
|
|
def get_email(self, obj):
|
|
return obj["email"]
|
|
|
|
def get_locale(self, obj):
|
|
return obj["locale"]
|
|
|
|
def get_country_code(self, obj):
|
|
return obj["country_code"]
|
|
|
|
|
|
class NewsletterSubscriberSerializer(serializers.Serializer):
|
|
id = serializers.IntegerField()
|
|
email_address__email = serializers.CharField()
|
|
email_address__account_id = serializers.IntegerField(allow_null=True)
|
|
email_address__ip = serializers.CharField(allow_null=True)
|
|
email_address__country_code = serializers.CharField(allow_null=True)
|
|
email_address__locale = serializers.CharField(allow_null=True)
|
|
created_at = serializers.DateTimeField(format='%m-%d-%Y %H:%M:%S')
|
|
|
|
def validate(self, data):
|
|
data.update({
|
|
'old_id': data.pop('id'),
|
|
'email': data.pop('email_address__email'),
|
|
'ip_address': data.pop('email_address__ip'),
|
|
'country_code': data.pop('email_address__country_code'),
|
|
'locale': data.pop('email_address__locale'),
|
|
'created': data.pop('created_at'),
|
|
'user_id': self.get_user(data),
|
|
})
|
|
data.pop('email_address__account_id')
|
|
return data
|
|
|
|
# def create(self, validated_data):
|
|
# obj, _ = Review.objects.update_or_create(
|
|
# old_id=validated_data['old_id'],
|
|
# defaults=validated_data,
|
|
# )
|
|
# return obj
|
|
|
|
@staticmethod
|
|
def get_user(data):
|
|
|
|
if not data['email_address__account_id']:
|
|
return None
|
|
|
|
user = User.objects.filter(old_id=data['email_address__account_id']).first()
|
|
if not user:
|
|
raise ValueError(f"User account not found with old_id {data['email_address__account_id']}")
|
|
return user.id
|