migrate subscribers

This commit is contained in:
alex 2019-11-16 15:56:23 +03:00
parent 144b5abdbf
commit 4e005a7a4d
5 changed files with 69 additions and 23 deletions

View File

@ -0,0 +1,17 @@
# Generated by Django 2.2.7 on 2019-11-16 11:35
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('advertisement', '0007_auto_20191115_0750'),
]
operations = [
migrations.AlterModelOptions(
name='advertisement',
options={'verbose_name': 'Advertisement', 'verbose_name_plural': 'Advertisements'},
),
]

View File

@ -0,0 +1,20 @@
# Generated by Django 2.2.7 on 2019-11-16 12:48
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('notification', '0002_subscriber_old_id'),
]
operations = [
migrations.AlterField(
model_name='subscriber',
name='user',
field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='subscriber', to=settings.AUTH_USER_MODEL, verbose_name='User'),
),
]

View File

@ -74,7 +74,7 @@ class Subscriber(ProjectBaseMixin):
(USABLE, _('Usable')), (USABLE, _('Usable')),
) )
user = models.OneToOneField( user = models.ForeignKey(
User, User,
blank=True, blank=True,
null=True, null=True,

View File

@ -1,7 +1,5 @@
from pprint import pprint from pprint import pprint
from django.db.models import Count
from transfer.models import EmailAddresses, NewsletterSubscriber from transfer.models import EmailAddresses, NewsletterSubscriber
from transfer.serializers.notification import SubscriberSerializer, NewsletterSubscriberSerializer from transfer.serializers.notification import SubscriberSerializer, NewsletterSubscriberSerializer
@ -25,14 +23,14 @@ def transfer_newsletter_subscriber():
'email_address__ip', 'email_address__ip',
'email_address__country_code', 'email_address__country_code',
'email_address__locale', 'email_address__locale',
'created_at', 'updated_at',
) )
# serialized_data = NewsletterSubscriberSerializer(data=list(queryset.values()), many=True) serialized_data = NewsletterSubscriberSerializer(data=list(queryset), many=True)
# if serialized_data.is_valid(): if serialized_data.is_valid():
# serialized_data.save() serialized_data.save()
# else: else:
# pprint(f'NewsletterSubscriber serializer errors: {serialized_data.errors}') pprint(f'NewsletterSubscriber serializer errors: {serialized_data.errors}')
data_types = { data_types = {

View File

@ -1,3 +1,4 @@
from django.db import IntegrityError
from rest_framework import serializers from rest_framework import serializers
from account.models import User from account.models import User
@ -41,10 +42,10 @@ class NewsletterSubscriberSerializer(serializers.Serializer):
id = serializers.IntegerField() id = serializers.IntegerField()
email_address__email = serializers.CharField() email_address__email = serializers.CharField()
email_address__account_id = serializers.IntegerField(allow_null=True) email_address__account_id = serializers.IntegerField(allow_null=True)
email_address__ip = serializers.CharField(allow_null=True) email_address__ip = serializers.CharField(allow_null=True, allow_blank=True)
email_address__country_code = serializers.CharField(allow_null=True) email_address__country_code = serializers.CharField(allow_null=True, allow_blank=True)
email_address__locale = serializers.CharField(allow_null=True) email_address__locale = serializers.CharField(allow_null=True, allow_blank=True)
created_at = serializers.DateTimeField(format='%m-%d-%Y %H:%M:%S') updated_at = serializers.DateTimeField(format='%m-%d-%Y %H:%M:%S')
def validate(self, data): def validate(self, data):
data.update({ data.update({
@ -53,18 +54,28 @@ class NewsletterSubscriberSerializer(serializers.Serializer):
'ip_address': data.pop('email_address__ip'), 'ip_address': data.pop('email_address__ip'),
'country_code': data.pop('email_address__country_code'), 'country_code': data.pop('email_address__country_code'),
'locale': data.pop('email_address__locale'), 'locale': data.pop('email_address__locale'),
'created': data.pop('created_at'), 'created': data.pop('updated_at'),
'user_id': self.get_user(data), 'user_id': self.get_user(data),
}) })
data.pop('email_address__account_id') data.pop('email_address__account_id')
return data return data
# def create(self, validated_data): def create(self, validated_data):
# obj, _ = Review.objects.update_or_create( try:
# old_id=validated_data['old_id'], obj = Subscriber.objects.get(email=validated_data['email'])
# defaults=validated_data, except Subscriber.DoesNotExist:
# ) obj = Subscriber.objects.create(**validated_data)
# return obj else:
current_data = obj.created
if validated_data['created'] > current_data:
obj.ip_address = validated_data['ip_address']
obj.locale = validated_data['locale']
obj.country_code = validated_data['country_code']
obj.old_id = validated_data['old_id']
obj.created = validated_data['created']
obj.user_id = validated_data['user_id']
obj.save()
return obj
@staticmethod @staticmethod
def get_user(data): def get_user(data):
@ -73,6 +84,6 @@ class NewsletterSubscriberSerializer(serializers.Serializer):
return None return None
user = User.objects.filter(old_id=data['email_address__account_id']).first() user = User.objects.filter(old_id=data['email_address__account_id']).first()
if not user: if user:
raise ValueError(f"User account not found with old_id {data['email_address__account_id']}") return user.id
return user.id return None