From 418ef2769485139a561b8b2c9298a634db577605 Mon Sep 17 00:00:00 2001 From: alex Date: Fri, 15 Nov 2019 10:21:28 +0300 Subject: [PATCH] transfer newsletter_subscriber --- apps/notification/transfer_data.py | 32 ++++++++++--- apps/transfer/management/commands/transfer.py | 1 + apps/transfer/serializers/notification.py | 45 +++++++++++++++++++ 3 files changed, 72 insertions(+), 6 deletions(-) diff --git a/apps/notification/transfer_data.py b/apps/notification/transfer_data.py index 49ae6887..dcc5b395 100644 --- a/apps/notification/transfer_data.py +++ b/apps/notification/transfer_data.py @@ -1,24 +1,44 @@ from pprint import pprint -from transfer.models import EmailAddresses -from transfer.serializers.notification import SubscriberSerializer +from account.models import User +from transfer.models import EmailAddresses, NewsletterSubscriber +from transfer.serializers.notification import SubscriberSerializer, NewsletterSubscriberSerializer def transfer_subscriber(): - queryset = EmailAddresses.objects.filter(state="usable") + queryset = EmailAddresses.objects.filter(state='usable') serialized_data = SubscriberSerializer(data=list(queryset.values()), many=True) if serialized_data.is_valid(): serialized_data.save() else: - pprint(f"News serializer errors: {serialized_data.errors}") + pprint(f'News serializer errors: {serialized_data.errors}') def transfer_newsletter_subscriber(): - pass + users = User.objects.filter(old_id__isnull=False).values_list('old_id', flat=True) + queryset = NewsletterSubscriber.objects.filter( + email_address__account_id__in=list(users) + ).values( + 'id', + 'email_address__email', + 'email_address__account_id', + 'email_address__ip', + 'email_address__country_code', + 'email_address__locale', + 'state', + 'created_at', + ) + + serialized_data = NewsletterSubscriberSerializer(data=list(queryset.values()), many=True) + if serialized_data.is_valid(): + serialized_data.save() + else: + pprint(f'NewsletterSubscriber serializer errors: {serialized_data.errors}') data_types = { - "subscriber": [transfer_subscriber] + 'subscriber': [transfer_subscriber], + 'newsletter_subscriber': [transfer_newsletter_subscriber], } diff --git a/apps/transfer/management/commands/transfer.py b/apps/transfer/management/commands/transfer.py index 28e40c50..f30a8467 100644 --- a/apps/transfer/management/commands/transfer.py +++ b/apps/transfer/management/commands/transfer.py @@ -38,6 +38,7 @@ class Command(BaseCommand): 'assemblage', 'rating_count', 'product_review', + 'newsletter_subscriber', # подписчики на рассылку - переносить после переноса пользователей №1 ] def handle(self, *args, **options): diff --git a/apps/transfer/serializers/notification.py b/apps/transfer/serializers/notification.py index c179dd2a..bd568239 100644 --- a/apps/transfer/serializers/notification.py +++ b/apps/transfer/serializers/notification.py @@ -33,3 +33,48 @@ class SubscriberSerializer(serializers.ModelSerializer): def get_country_code(self, obj): return obj["country_code"] + + +class NewsletterSubscriberSerializer(serializers.Serializer): + pass + # vintage = serializers.IntegerField() + # mark = serializers.FloatField(allow_null=True) + # establishment_id = serializers.IntegerField() + # created_at = serializers.DateTimeField(format='%m-%d-%Y %H:%M:%S') + # aasm_state = serializers.CharField(allow_null=True) + # reviewer_id = serializers.IntegerField() + # id = serializers.IntegerField() + # + # def validate(self, data): + # data.update({ + # 'reviewer': self.get_reviewer(data), + # 'status': Review.READY if data['aasm_state'] == 'published' else Review.TO_INVESTIGATE, + # 'published_at': data.pop('created_at'), + # 'old_id': data.pop('id'), + # 'content_object': self.get_establishment(data), + # }) + # data.pop('reviewer_id') + # data.pop('establishment_id') + # data.pop('aasm_state') + # 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_reviewer(data): + # user = User.objects.filter(old_id=data['reviewer_id']).first() + # if not user: + # raise ValueError(f"User account not found with old_id {data['reviewer_id']}") + # return user + # + # @staticmethod + # def get_establishment(data): + # establishment = Establishment.objects.filter(old_id=data['establishment_id']).first() + # if not establishment: + # raise ValueError(f"Establishment not found with old_id {data['establishment_id']}: ") + # return establishment